プロが教えるわが家の防犯対策術!

Vlookup関数のように、
コンボボックスで指定した。コードを元に、TextBoxに自動表示させるコードを教えていただけないでしょうか。

自分で、本をみながらやっているのですが、できなくて困っています。
どなたかご存知の方、ご教授ください。

A 回答 (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関数を使用する必要もないのではないかと、思っているしだいです。

この回答への補足

回答ありがとうございます。

検索値が存在しない場合のエラーを防ぐために必要という事ですね。
Vlookup関数を使って、テキストボックスを使用する場合、Rowsourceから選択する事はできないから、エラーが出てくる場合があるので、それを無視するという構文だったんですね。

勉強になります。URLも紹介してくださってありがとうございます。

とりあえず、勉強のために、「Combobox.ListIndex」も試してみます。
本当にありがとうございました。頼りにしていますので、これからもよろしくお願いします。

補足日時:2009/12/15 00:27
    • good
    • 0

エクセル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は(調べてみますが)出来なかったような記憶がある。

この回答への補足

回答ありがとうございます。
一応、問題は解決しました。

補足日時:2009/12/14 19:56
    • good
    • 0

こんばんは。


#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

この回答への補足

返事が遅くなってしまい、申し訳ありません。

おっしゃるとおり訂正したら、無事、思うように動作しました。
本当にありがとうございます。

補足日時:2009/12/14 19:53
    • good
    • 0

コピペしたのは


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

は本には『エラーは無視する』という意味なんだそうですが、何故コレが『エラーは無視する』という意味になるのか、また、コレは絶対必要なのか?って事です。

もし、よろしければ、教えていただきたいのですが、、、、、
本当に度々すみません。
私が見ている本には、あまり詳しく記載がないもので、、、、、
恐縮ですが、よろしければ、お願いします。

補足日時:2009/12/14 19:37
    • good
    • 0

ワークシート関数(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さんのものを、コピペしてやってみたのですが、上手くいきません。

他の方法はないでしょうか。
図々しく質問してすみません。

補足日時:2009/12/12 19:34
    • good
    • 0

こんにちは。



同じような質問がすでに出ていますが、それで応用できませんか?

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

です。

補足日時:2009/12/12 19:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!