プロが教える店舗&オフィスのセキュリティ対策術

フォームで入力画面をつくっています。
あるコンボボックスのリストから項目が選択されたら、一覧からリンクさせてテキストボックスの内容を更新がしたいのです。
例えば「社員コード」のコンボボックスで「3」が選択されたら、「社員名」のテキストボックスに別シートに作成してある社員一覧から「太郎」が表示されるというようにです。

セルA1とコンボボックスをリンクさせ、セルB1にVLOOKUP(A1,一覧,2)で一覧から名前を抽出しました。コンボボックスのChangeイベントでB1の内容をテキストボックスへ送っているのですが、カーソルを別の項目へ移動するまではテキストボックスの内容が更新されません。
コンボボックスのリストを選択した時点でテキストボックスを更新する方法はないでしょうか?

A 回答 (2件)

こんばんは。



今は、Form というのは、UserForm のことだと思います。Excelには、フォームツールもありますが、レガシーツールですから、割愛します。

>セルA1とコンボボックスをリンクさせ、セルB1にVLOOKUP(A1,一覧,2)で一覧から名前を抽出しました。
UserForm で、なぜ、ComboBox で、A1 にリンクさせるのでしょうか?
リンクというのは、ControlSource のことだと思います。それでは、出来ませんね。
Change イベントに組み込まないといけません。そのような方法をしなくても可能です。

'-------------------------------------------
たとえば、ワークシートのセルに社員コードと社員名を入れたもの書かれてあるとします。
次に、ComboBox のプロバティの「RowSource」に少なくとも、2列を登録します。

なお、ComboBoxは、2列も入れることが可能です。
ColumnCount | 2 ,ColumnWidth | 20 pt; 20 pt (pt は省略可)のようにすることが可能です。

そうして、以下のようにすれば、テキストボックスに出てくるはずです。

 .ListIndex + 1 と+1しているのは、初期値が -1 で、最初が、0 からだからです。

'-------------------------------------------
Private Sub ComboBox1_Change()
Dim ret As Variant
  With ComboBox1
  ret = Application.VLookup(.ListIndex + 1, ActiveSheet.Range(.RowSource), 2)
  If Not IsError(ret) Then
   TextBox1.Value = ret
  End If
  End With
End Sub
'-------------------------------------------
ActiveSheet よりも、Worksheets(____) と入れたほうがよいです。
    • good
    • 0
この回答へのお礼

知識がないために出来る範囲でやろうとして、まったく無駄なことをしていたようです。
勉強不足を痛感いたしました。
教えていただいた記述で思ったとおりの処理が出来ました。
ありがとうございました。

お礼日時:2009/12/10 22:18

同じことを試して見ましたが、コンボボックスの選択イベントでテキストボックスの値は更新されました。


駄目だったコードを提示して見てください。
あと、Excelのバージョンも。

この回答への補足

コンボボックス社員コードのChangeイベントで
Sheets("一覧表").Range("A1") = Int(社員コード)
社員名 = Sheets("一覧表").Range("B1")

B1のセルには「=VLOOKUP(A1,一覧,2)」という関数が入っています。

Excelは2003を使用しています。
よろしくお願いいたします。

補足日時:2009/12/10 21:13
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A