こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのVBA

お世話になります。

ただ今,VBAで以下のことに挑戦していますが,行き詰ってしまいました。皆様のお知恵をお貸しください。

1.エクセルで,ある図形をクリックすると,インプットボックスが開き,「顧客番号を入力」と出ます。
2.顧客番号を入力すると,「顧客管理」というシートのD1セルにその番号が入力されます。
3.その顧客番号をもとに「顧客名簿」というシートのデータから,その顧客の住所や性別などのデータがvlookupで引っ張ってこられます。

そこでご相談です。上記の2の操作で,顧客番号を入力後,すぐにD1セルに番号が入力されるのではなく,

メッセージボックスでの確認画面「○○さんのデータを表示しますか」(○○には顧客番号に該当する顧客名が入ります)というものを表示させ,OKを押せば,D1セルに番号が入力され,キャンセルを押せば,単純に,メッセージボックスが閉じる

という機能を追加したいのですが。ちなみに,現在のVBAは以下の通りです。

Dim ans As String
ans = InputBox("顧客番号を入力", "入力", "")

If ans <> "" Then
Sheets("顧客管理").Select
Range("D1").Value = ans

End If

End Sub

これの,どこにどのようなプログラムを追加したらいいのでしょうか。

よろしくお願いします。

投稿日時 - 2012-12-18 16:09:02

QNo.7850652

困ってます

質問者が選んだベストアンサー

いや、単純にMSGBOX関数を使えばいいだけの話なんじゃ?
詳細は「Excel VBA MSGBOX」とかで検索して頂くとして。

Dim ans As String
ans = InputBox("顧客番号を入力", "入力", "")

If ans <> "" Then

IF MSGBOX(Cstr(ans)&"さんのデータを表示しますか?",vbYesNo)=vbYes Then

Sheets("顧客管理").Select
Range("D1").Value = ans

End IF
End If

End Sub

チェックしてないですが、これで動くんじゃないかと。

参考URL:http://officetanaka.net/excel/vba/function/MsgBox.htm

投稿日時 - 2012-12-18 16:26:35

補足

さっそく,ありがとうございます。
試してみたところ,メッセージボックスの確認画面が出てきましたが,顧客名ではなく,顧客番号での確認メッセージでした。

VBA初心者ですので,Cstrという部分を直せばいいのかな?という感じでしか,調整できません。もう少しご教授いただければ,幸いです。
よろしくお願いします。

投稿日時 - 2012-12-18 16:32:36

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>試してみたところ,メッセージボックスの確認画面が出てきましたが,顧客名ではなく,顧客番号での>確認メッセージでした。

>VBA初心者ですので,Cstrという部分を直せばいいのかな?という感じでしか,調整できません。

NO.1の方の回答で正しいです。
ですが、質問者さまの質問の意図に入力した顧客番号にヒットした顧客名を確認したいということが伝わっていないからです。
補足説明します。

Dim ans As String
ans = InputBox("顧客番号を入力", "入力", "") ・・・(1)

If ans <> "" Then

<(2)>
IF MSGBOX(Cstr(ans)&"さんのデータを表示しますか?",vbYesNo)=vbYes Then ・・・(3)

Sheets("顧客管理").Select 
Range("D1").Value = ans  

End IF
End If

End Sub

(1)で入力を促しansという変数には入力した顧客番号が入っています。
(1)で入力した顧客番号を元に「顧客名簿」というシートのデータから,その顧客の住所や性別などのデータがvlookupで引っ張ってこられます。
その引っ張った顧客名のセルは?どこに置かれますか? それを取得して(2)の所にセットし、
(3)のCstr(ans)の所を取得したセルに変えてあげれば、顧客名を確認出来ます。

vlookup参照
http://kokoro.kir.jp/excel/vlookup-false.html

投稿日時 - 2012-12-18 17:51:16

お礼

お礼が遅くなりすみません。

みなさんにいろいろと教えていただいたことを試したところ,望んでいたものに近いものができました。

ご協力ありがとうございました。

まだまだVBA初心者で,わからないことだらけですが,少しずつ勉強していきます。

こんごともよろしくお願いします。

投稿日時 - 2012-12-19 11:43:18

ANo.3

ちょっと横入りを。
文章は長いですが、中身は薄いです^^;


> メッセージボックスでの確認画面「○○さんのデータを表示しますか」(○○には顧客番号に該当する顧客名が入ります)というものを表示させ

顧客番号と顧客名の対応表はどこかに持っているという事でしょう。
おなじみ(?)VLOOKUP関数を使って行う、簡単な方法を。

Sub Test()
Dim ans As String, ans2 As String
    ans = InputBox("顧客番号を入力", "入力", "")
        If ans = "" Then
            MsgBox "顧客番号が空白です" & vbNewLine & _
               "処理を中止します", vbOKOnly
        Else
            If WorksheetFunction.CountIf(Worksheets("対応表があるシート名").Range("顧客番号が入力されている範囲"), ans) = 0 Then
                MsgBox "顧客番号が登録されていません", vbOKOnly
            Else
                ans2 = WorksheetFunction.VLookup(ans, Worksheets("対応表があるシート名").Range("対応表のセル範囲"), 2, False)
                If MsgBox(ans2 & " さんのデータを表示しますか", vbYesNo) = vbYes Then
                    Sheets("顧客管理").Select
                    Range("D1").Value = ans
                Else
                    MsgBox "処理を中止します", vbOKOnly
                End If
            End If
        End If
End Sub


「対応表のセル範囲」は、例えば「A1:B6」のように指定します。
その他の使い方はワークシート関数のVLOOKUPと同じです。


ちなみに・・「対応表」に「顧客番号」が無い場合は
VLOOKUPがエラーを返して止まってしまいますので、
これまたおなじみ(?)のCOUNTIF関数で件数が0だと
メッセージを出して止まる仕掛けを入れています。

文字列と数値をシビアに見てしまうので、変数ansのデータ型の扱いに注意しましょう。

投稿日時 - 2012-12-18 17:33:04

補足

ありがとうございます。

教えていただいたとおりに試してみましたが,ans2 = の行で「vlookupのプロパティを取得できません」というエラーが出てしまいました。

シート名や範囲も確認し,入力ミスが無いかも確認しましたが,うまくいきません。

聞いたことのないエラーなので,いろいろ調べてみましたが,解決法が見つかりませんでした。

投稿日時 - 2012-12-18 18:50:26

ANo.2

顧客名の入ってるセルの情報が無いので、これ以上の
回答は出来ませんが、発想だけ。

1.IF文の中で、セルD1に顧客番号を埋め込んでしまい、
Vlookupで呼び出された名前を何かの変数で受け取る

2.受け取った変数を使ってメッセージを表示する。

Cstrは「変数を文字列にする関数」ですから、ここを適当
いじる程度じゃ無理です。

投稿日時 - 2012-12-18 17:12:40

補足

説明不足ですみません。
顧客名の入っているシートは,A列に顧客番号,B列に顧客名,C列以降に顧客データが横にずーっと並んでいます。その顧客番号に該当する顧客名を表示させるということになります。
すみません。

投稿日時 - 2012-12-18 17:24:37

あなたにオススメの質問