- ベストアンサー
エクセルのVBAで顧客番号を入力後の動作をカスタマイズする方法
- エクセルのVBAを使用して顧客番号を入力した後の動作をカスタマイズする方法についてご相談です。
- 現在のVBAコードに追加することで、顧客番号の入力後に確認画面を表示し、OKを押せば番号が入力され、キャンセルを押せばメッセージボックスが閉じる機能を実装することができます。
- 詳細な手順やサンプルコードについては、以下の要領で説明します。お手数ですが、ご参考にしてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
いや、単純に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 チェックしてないですが、これで動くんじゃないかと。
その他の回答 (3)
- NYAN99
- ベストアンサー率35% (32/90)
>試してみたところ,メッセージボックスの確認画面が出てきましたが,顧客名ではなく,顧客番号での>確認メッセージでした。 >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
お礼
お礼が遅くなりすみません。 みなさんにいろいろと教えていただいたことを試したところ,望んでいたものに近いものができました。 ご協力ありがとうございました。 まだまだVBA初心者で,わからないことだらけですが,少しずつ勉強していきます。 こんごともよろしくお願いします。
- tsubuyuki
- ベストアンサー率45% (699/1545)
ちょっと横入りを。 文章は長いですが、中身は薄いです^^; > メッセージボックスでの確認画面「○○さんのデータを表示しますか」(○○には顧客番号に該当する顧客名が入ります)というものを表示させ 顧客番号と顧客名の対応表はどこかに持っているという事でしょう。 おなじみ(?)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のデータ型の扱いに注意しましょう。
補足
ありがとうございます。 教えていただいたとおりに試してみましたが,ans2 = の行で「vlookupのプロパティを取得できません」というエラーが出てしまいました。 シート名や範囲も確認し,入力ミスが無いかも確認しましたが,うまくいきません。 聞いたことのないエラーなので,いろいろ調べてみましたが,解決法が見つかりませんでした。
- FEX2053
- ベストアンサー率37% (7991/21373)
顧客名の入ってるセルの情報が無いので、これ以上の 回答は出来ませんが、発想だけ。 1.IF文の中で、セルD1に顧客番号を埋め込んでしまい、 Vlookupで呼び出された名前を何かの変数で受け取る 2.受け取った変数を使ってメッセージを表示する。 Cstrは「変数を文字列にする関数」ですから、ここを適当 いじる程度じゃ無理です。
補足
説明不足ですみません。 顧客名の入っているシートは,A列に顧客番号,B列に顧客名,C列以降に顧客データが横にずーっと並んでいます。その顧客番号に該当する顧客名を表示させるということになります。 すみません。
補足
さっそく,ありがとうございます。 試してみたところ,メッセージボックスの確認画面が出てきましたが,顧客名ではなく,顧客番号での確認メッセージでした。 VBA初心者ですので,Cstrという部分を直せばいいのかな?という感じでしか,調整できません。もう少しご教授いただければ,幸いです。 よろしくお願いします。