- ベストアンサー
ExcelVBAについて
Vlookup関数のように、 コンボボックスで指定した。コードを元に、TextBoxに自動表示させるコードを教えていただけないでしょうか。 自分で、本をみながらやっているのですが、できなくて困っています。 どなたかご存知の方、ご教授ください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
On error についてのサイトを照会しておきます。 http://excelvba.pc-users.net/fol6/6_8.html それと、多分、テキストにある事例は、ComboboxでなくTextBoxで入力した値を検索する事例ではないでしょうか。 Vlookup関数ですので、検索値がない場合はエラー(#NA)が表示されますよね。 VBAでエラーがでると、終了 デバッグのメッセージがでるので On Error Resume Next を記述しているのではないでしょうか。 質問者の場合、ComboBoxですので、必ず検索値が存在しますよね。 つまりエラーは発生しないはずですので、Error処理は不要なのではないでしょうか。 それよりも、Combobox.ListIndex で選択した値が何行目なのかわかるので Vlookup関数を使用する必要もないのではないかと、思っているしだいです。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルVBAでもVLOOKUP関数は使えます。 >11番目(L列)と2番目(L列)を コンボでいつも2つ以内を選択するのですか。 コンボで選択するとき、例えば会社の場合会社名(人間に判りやすい方)を選択して、会社コードなどを割り出すのが普通でしょう。 逆は不便です。 1つしか選択しない例ですが それならコンボを2列にしてBoundColumnを2列目とかにすれば良い。 F1:G3 東京 1 大阪 2 福岡 3 ーー プロパティ BoundColumn 2 ColumnCount 2 TextColumn 2 ーー Private Sub ComboBox1_Change() MsgBox ComboBox1.TextColumn End Sub エクセルVBAでは、コンボでMultiSelectは(調べてみますが)出来なかったような記憶がある。
補足
回答ありがとうございます。 一応、問題は解決しました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #1の回答者です。 #1の補足のコードは、スペルが違っています。Worksheetsfunction ではなくて、WorksheetFunction (s)が余分です。 TextBox1.Text=Worksheet[s]function._ ← それと、._ (点とアンダーバー)がくっついています半角スペースを間に入れます。 Private Sub ComboBox1_Change() On Error Resume Next TextBox1.Text = WorksheetFunction. _ VLookup(CInt(ComboBox1.Value), Range("一覧"), 2, False) On Error GoTo 0 End Sub
補足
返事が遅くなってしまい、申し訳ありません。 おっしゃるとおり訂正したら、無事、思うように動作しました。 本当にありがとうございます。
- hallo-2007
- ベストアンサー率41% (888/2115)
コピペしたのは Private Sub ComboBox1_Change() TextBox1.Value = Range("B" & ComboBox1.ListIndex).Value End Sub ですか?まずエラーではないですよね? >Rowsource上にある表の11番目(L列)と2番目(L列)を、それぞれのテキストボックスに表示させたい Rowsourceで選択したのは何行目? 表示したいのは 何故にL11とL2セル? Private Sub ComboBox1_Change() MsgBox ComboBox1.ListIndex TextBox1.Value = Range("L" & ComboBox1.ListIndex + 1).Value End Sub メッセージボックスで表示される数値と Textboxに表示された値の行番号の関係はどうなっていますか?
補足
返事が遅くなってすみません。 おかげさまで問題は解決しました。 >Rowsource上にある表の11番目(L列)と2番目(L列)を、それぞれのテキストボックスに表示させたい ↑はすみません。私のタイプミスです。 正しくは「2番目(C列)」です。本当に申し訳ございません。 一応、問題は解決したものの、ちょっと分からないのが、CInt()はどういう意味なのか?と、TextとValueは同違うのか?って事と、 On Error Resume Next On Error GoTo 0 は本には『エラーは無視する』という意味なんだそうですが、何故コレが『エラーは無視する』という意味になるのか、また、コレは絶対必要なのか?って事です。 もし、よろしければ、教えていただきたいのですが、、、、、 本当に度々すみません。 私が見ている本には、あまり詳しく記載がないもので、、、、、 恐縮ですが、よろしければ、お願いします。
- hallo-2007
- ベストアンサー率41% (888/2115)
ワークシート関数(VLOOKUP)をVBAで使う方法もあります。 Private Sub ComboBox1_Change() TextBox1.Value = WorksheetFunction.VLookup(ComboBox1.Value, Columns("A:B"), 2, False) End Sub A列を検索して、B列を取得といった感じですが? ふと思ったのですが ComboBoxに表示されているのが、仮にA列だとして、その隣(B列)の値を出したいという質問であれば、ComboxのListIndexが使えると思います。 Private Sub ComboBox1_Change() TextBox1.Value = Range("B" & ComboBox1.ListIndex).Value End Sub
補足
回答ありがとうございます。 おっしゃる通り、表の左端の列から、目的のセル内の値を表示させたいのです。 hallo-2007さんのものを、コピペしてやってみたのですが、上手くいきません。 他の方法はないでしょうか。 図々しく質問してすみません。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 同じような質問がすでに出ていますが、それで応用できませんか? http://oshiete1.goo.ne.jp/qa5512098.html #2 もし、本で分からないようでしたら、本の内容を具体的におっしゃってください。 ご質問内容だけでは、ComboBox というのは、Form ツールでも、Control ツールでも、UserForm 上でもありますから、それが特定できません。
補足
早速の回答ありがとうございます。 コンボボックスとテキストボックスはユーザーフォーム上にあります。 コンボボックスのRowsource上にある表の11番目(L列)と2番目(L列)を、それぞれのテキストボックスに表示させたいのですが、上手くいきません。 本に記載されている内容は、 Private Sub ComboBox1_Change() On Error Resume Next TextBox1.Text=Worksheetsfunction._ VLookup(CInt(ComboBox1.Text),Range("一覧"),2,False) On Error GoTo 0 End Sub です。
補足
回答ありがとうございます。 検索値が存在しない場合のエラーを防ぐために必要という事ですね。 Vlookup関数を使って、テキストボックスを使用する場合、Rowsourceから選択する事はできないから、エラーが出てくる場合があるので、それを無視するという構文だったんですね。 勉強になります。URLも紹介してくださってありがとうございます。 とりあえず、勉強のために、「Combobox.ListIndex」も試してみます。 本当にありがとうございました。頼りにしていますので、これからもよろしくお願いします。