【最大10000ポイント】当たる!!質問投稿キャンペーン!

VBAのコンボボックスについての質問です。
画像のようなデータがあったとして
フォームのコンボボックスで会社を選択すると、その会社の商品が一覧として出てきて
さらに商品を選択すると味の一覧が出てきて、その後商品のサイズが選択できるような処理をしたいです。
ただし、コンボボックスには、A社、A社・・・B社、B社・・・のように重複するのではなく、A社、B社のように出てくるようにしたいです。

「VBAでのコンボボックスの連動について」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんな感じで如何でしょう?


以下を当該のユーザーフォームに入力してください。
元の表は、アクティブなシートのA1:D15に書かれていることが前提になります。
Ckaisha,Cshoshin,Caji,Csizeが、それぞれ会社、商品、味、サイズの各コンボボックス名になります。

※私の環境(Win10 64bit/Excel2013)では、イベント連鎖抑止目的でApplication.EnableEventsが上手く機能しなかったので、flagというモジュール内変数を宣言して代わりに使用しました。

---------------------------------------------------------
Option Explicit

Private flag As Boolean

Private Sub UserForm_initialize()
flag = True
Call makeKaishaList(Range("A2:A15"))
flag = False
End Sub

Private Sub Ckaisha_Change()
If flag Then
Exit Sub
End If
flag = True
Call makeShohinList(Range("B2:B15"))
flag = False
End Sub

Private Sub Cshohin_Change()
If flag Then
Exit Sub
End If
flag = True
Call makeAjiList(Range("C2:C15"))
flag = False
End Sub

Private Sub Caji_Change()
If flag Then
Exit Sub
End If
flag = True
Call makeSizeList(Range("D2:D15"))
flag = False
End Sub

Private Sub makeKaishaList(ByRef r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean

Ckaisha.Clear
For Each rng In r
f = False
With Ckaisha
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem rng.Value
End If
End With
Next
Ckaisha.ListIndex = 0
Call makeShohinList(r.offset(0, 1))
End Sub

Private Sub makeShohinList(r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean

If Ckaisha.Text = "" Then
MsgBox "選択されていない項目があります。", vbExclamation
Exit Sub
End If
Cshohin.Clear
For Each rng In r
f = False
If rng.offset(0, -1).Value <> Ckaisha.Text Then GoTo L_CONTINUE
With Cshohin
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem rng.Value
End If
End With
L_CONTINUE:
Next
Cshohin.ListIndex = 0
Call makeAjiList(r.offset(0, 1))
End Sub

Private Sub makeAjiList(r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean

If Ckaisha.Text = "" Or Cshohin.Text = "" Then
MsgBox "選択されていない項目があります。", vbExclamation
Exit Sub
End If
Caji.Clear
For Each rng In r
f = False
If rng.offset(0, -2).Value <> Ckaisha.Text Then GoTo L_CONTINUE
If rng.offset(0, -1).Value <> Cshohin.Text Then GoTo L_CONTINUE
With Caji
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem (rng.Value)
End If
End With
L_CONTINUE:
Next
Caji.ListIndex = 0
Call makeSizeList(r.offset(0, 1))
End Sub

Private Sub makeSizeList(r As Range)
Dim rng As Range
Dim i As Long
Dim f As Boolean

If Ckaisha.Text = "" Or Cshohin.Text = "" Or Caji.Text = "" Then
MsgBox "選択されていない項目があります。", vbExclamation
Exit Sub
End If
Csize.Clear
For Each rng In r
f = False
If rng.offset(0, -3).Value <> Ckaisha.Text Then GoTo L_CONTINUE
If rng.offset(0, -2).Value <> Cshohin.Text Then GoTo L_CONTINUE
If rng.offset(0, -1).Value <> Caji.Text Then GoTo L_CONTINUE
With Csize
For i = 0 To .ListCount - 1
If rng.Value = .List(i) Then
f = True
Exit For
End If
Next i
If Not f Then
.AddItem (rng.Value)
End If
End With
L_CONTINUE:
Next
Csize.ListIndex = 0
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました!
ほぼ希望通りの動作になりました。
これを機にもう少しVBAを勉強してみたいと思います。

お礼日時:2016/02/15 01:46

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコンボボックス3つを連動させたい

VBA初心者なのですが、参考書やインターネットを勉強しながら取り組んでいます。行き詰っているので助け舟を頂戴できればと思います。
やりたいのは1800アイテムほどある食品リストからコードと食品名を検索するプログラムです。

もとになるデータは、B食品群、C食品コード、D食品名、あとは成分値が右にずっと続いています。
コンボボックスを3つ作り、食品群、食品コード、食品名が表示されるようにしました。
これらを連動させ、
1食品群ー食品名で探す
2コードー食品名で探す
3食品名を直接入力して探す
いずれにも対応できるようなもの、最終的には任意のセルに選択した食品名及びその食品のコードを表示できるようにしたいのです。

リスト範囲は
Private Sub UserForm_Initialize()
'食品群のリスト範囲’(食品群は18種)
ComboBox1.RowSource = "処理!B3:B20"←リスト選択用に見出しの部分だけ別シートに作りました
'食品名のリスト範囲’
ComboBox2.RowSource = "食品成分表!D4:D1885"
'食品コードのリスト範囲’
ComboBox3.RowSource = "食品成分表!C4:C1885"
End Sub
とし、
Private Sub comboBox1_Change()
'食品群リスト、食品名リストを連動させる’
Dim selIndex As Integer
selIndex = Me.ComboBox1.ListIndex
Select Case selIndex
Case 0
Me.ComboBox2.RowSource = "食品成分表!D4:D146"
<以下Case 18まで続く>
End Select
End Sub

と、食品群と食品は連動できたのですが、食品群とコード、コードと食品名がつなげられません。
Addltemでひとつづつ書いてもみましたが、1800ともなると量が多すぎるようでエラーになってしまいます。
よろしければアドバイスをお願いします。


  

VBA初心者なのですが、参考書やインターネットを勉強しながら取り組んでいます。行き詰っているので助け舟を頂戴できればと思います。
やりたいのは1800アイテムほどある食品リストからコードと食品名を検索するプログラムです。

もとになるデータは、B食品群、C食品コード、D食品名、あとは成分値が右にずっと続いています。
コンボボックスを3つ作り、食品群、食品コード、食品名が表示されるようにしました。
これらを連動させ、
1食品群ー食品名で探す
2コードー食品名で探す
3食品名を直接入力...続きを読む

Aベストアンサー

結果を別に持つ方がやりやすいかと思います。

UserForm に ComboBox を3つ、ListBox を1つ、CommandButton を1つ置いて
試してます。
AddItem でやってますのでソートされてなくても大丈夫ですが、ソート
されているなら #3さんのような工夫をされた方が速いでしょう。

読み取ったイメージだけで作ってますので、的外れかも知れませんし、
そのままでは動かないかも知れません。

試すなら元ブックのコピーを用意するなどテスト環境で。

'----------------------------------------------------------------
Private Sub UserForm_Initialize()
  ComboBox1.RowSource = "処理!B3:B20"
  ComboBox2.RowSource = "食品成分表!D4:D1885"
  ComboBox3.RowSource = "食品成分表!C4:C1885"
  ListBox1.ColumnCount = 3
  CommandButton1.Enabled = False
End Sub
'----------------------------------------------------------------
Private Sub ComboBox1_Change()
Dim c, first As String
ListBox1.Clear
CommandButton1.Enabled = False
With Worksheets("食品成分表").Range("B3:B1885")
  Set c = .Find(Me.ComboBox1.Text, LookIn:=xlValues)
  If Not c Is Nothing Then
    first = c.Address
    Do
     With Me.ListBox1
      .AddItem c.Text
      .List(.ListCount - 1, 1) = c.Offset(0, 1).Text
      .List(.ListCount - 1, 2) = c.Offset(0, 2).Text
     End With
      Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> first
  End If
End With
End Sub
'----------------------------------------------------------------
Private Sub ComboBox2_Change()
Dim c, first As String
ListBox1.Clear
CommandButton1.Enabled = False
With Worksheets("食品成分表").Range("D3:D1885")
  Set c = .Find(Me.ComboBox2.Text, LookIn:=xlValues)
  If Not c Is Nothing Then
    first = c.Address
    Do
     With Me.ListBox1
      .AddItem c.Offset(0, -2).Text
      .List(.ListCount - 1, 1) = c.Offset(0, -1).Text
      .List(.ListCount - 1, 2) = c.Text
     End With
      Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> first
  End If
End With
End Sub
'----------------------------------------------------------------
Private Sub ComboBox3_Change()
Dim c, first As String
ListBox1.Clear
CommandButton1.Enabled = False
With Worksheets("食品成分表").Range("C3:C1885")
  Set c = .Find(Me.ComboBox3.Text, LookIn:=xlValues)
  If Not c Is Nothing Then
    first = c.Address
    Do
     With Me.ListBox1
      .AddItem c.Offset(0, -1).Text
      .List(.ListCount - 1, 1) = c.Text
      .List(.ListCount - 1, 2) = c.Offset(0, 1).Text
     End With
      Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> first
  End If
End With
End Sub
'----------------------------------------------------------------
Private Sub CommandButton1_Click()
 With Me.ListBox1
 MsgBox .List(.ListIndex, 0) & vbCrLf & _
     .List(.ListIndex, 1) & vbCrLf & _
     .List(.ListIndex, 2)
 End With
End Sub
'----------------------------------------------------------------
Private Sub ListBox1_Click()
 CommandButton1.Enabled = ListBox1.ListCount <> -1
End Sub

結果を別に持つ方がやりやすいかと思います。

UserForm に ComboBox を3つ、ListBox を1つ、CommandButton を1つ置いて
試してます。
AddItem でやってますのでソートされてなくても大丈夫ですが、ソート
されているなら #3さんのような工夫をされた方が速いでしょう。

読み取ったイメージだけで作ってますので、的外れかも知れませんし、
そのままでは動かないかも知れません。

試すなら元ブックのコピーを用意するなどテスト環境で。

'-------------------------------------------------------...続きを読む

QVBAでシートからコンボボックスにデータを設定する方法

VBAにてフォーム起動時にシート内に設定した
値をコンボボックスに取り込みたいのですが・・。
たとえばA列に連続で入力されているデータを
取り込むなど・・。
設定データ数は動的に変化します。

Aベストアンサー

もうほとんど同じですが…

Private Sub UserForm_Initialize()
Dim i As Integer

 ComboBox1.Clear
 For i = 1 To Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row
  ComboBox1.AddItem Worksheets("sheet1").Cells(i, 1).Value
 Next
End Sub

QExcelVBA コンボボックスに入力があったらリンクしてテキストボックスを更新したい

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

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

Aベストアンサー

こんばんは。

今は、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(____) と入れたほうがよいです。

こんばんは。

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

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

'--------...続きを読む

QVBA コンボボックスで選んだ値を取得するには

ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。

コンボボックスのコードで
Private Sub ComboBox1_Change()
moji1 = ComboBox1.Text
Range("A1").Value = moji1
のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。

マクロ1にて、上記と同じ
Range("A1").Value = moji1
というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。

原因をご存知の方はお教えください。

Aベストアンサー

原因については下記を参考にしてください。
http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/eg5.shtml

QEXCEL VBA のユーザーフォームで絞り込み

ここで質問が出来るほどの実力はないのですが・・・。
EXCELのユーザーフォームにコンボボックスを2つ配置しておいて、ComboBox1では都道府県名を選択できるようにしておき、県名を選択したらComboBox2にその県の市町村名が絞り込まれて選択できるようにしたいと考えています。
エクセルにどのような並びでデータをセットしてどのようなコードを書けば実現できるのかをご教授して頂けないでしょうか?
まるまる「おんぶにだっこ」的な質問内容ですがよろしくお願いします。

Aベストアンサー

やり方はいくつもあるのですが、とりあえず簡単な方法。
都道府県名のリストと、市町村名のリストをワークシートに書いておく方法です。

まず最初に都道府県名のリストを作成します。
Sheet1(シートはどこでも構いません)の A1 に「東京都」A2 に「栃木県」A3 に「茨城県」と入力します。
(本番では A1 から下に向かって都道府県名を入力していってください。)

全部入力が終わったら A1~A3(47都道府県を入力したのなら A47 まで)を選択し、Excel ツールバーの左端の「名前ボックス」に「都道府県」と入力します。
場所わかるかなぁ・・・多分 A1~A47 を選択した状態だと A1 って表示されてると思います。(数式バーの左です)

次に各市町村のリストを作成します。
B1 に「江東区」B2 に「墨田区」B3 に「足立区」と、B列を下に向かって入力。
C1 に「宇都宮市」C2 に「日光市」C3 に「佐野市」と、C列を下に向かって入力。
D1 に「水戸市」D2 に「日立市」D3 に「鹿嶋市」と、D列を下に向かって入力。
B1~B列の最後に入力したセルまでを選択し、先ほどと同様、名前ボックスに「東京都」と入力。C列に入力した範囲は「栃木県」、D列に入力した範囲は「茨城県」と入力します。
ポイントは、A列に入力した都道府県名と全く同じ文字で名前をつける所です。
ここまでやったことを解説します。
都道府県名を入力し、その入力範囲に名前をつけました。
同じく、各都道府県ごとの市町村名にも都道府県の名前をつけました。

次にユーザーフォームでの作業です。
ユーザーフォームに ComboBox を 2つ準備します。名前はデフォルトのまま ComboBox1 と ComboBox2 とします。
ユーザーフォームに下記のコードを書きます。

Private Sub UserForm_Initialize()
Me.ComboBox1.RowSource = "都道府県"
Me.ComboBox2.RowSource = ""
End Sub

Private Sub ComboBox1_Change()
Me.ComboBox2.Value = ""
Me.ComboBox2.RowSource = Me.ComboBox1.Value
End Sub

これでユーザーが ComboBox1 で都道府県を選択すると、ComboBox2 には選択した都道府県の市町村リストが配置されます。

ここまでを解説します。
フォームの初期化イベントで ComboBox1 のリストに、シートで「都道府県」という名前がつけられた範囲の値をセットします。
Me.ComboBox1.RowSource = "都道府県"
「都道府県」という名前の範囲は A列に入力した各都道府県名がありますので、ComboBox1 には 47都道府県の名前が表示されます。

さらに ComboBox2 のリストを空っぽにします。
Me.ComboBox2.RowSource = ""
フォームの初期状態ではどの都道府県も選択されていないわけですから ComboBox2 は空っぽじゃなくてはいけません。

次に ComboBox1 でどこかの都道府県を選択したときの処理です。
まずは ComboBox2 で選択されている(かもしれない)どこかの市町村名をクリアします。
Me.ComboBox2.Value = ""

そして ComboBox1 で選択した都道府県名と同じ名前の市町村名リストを ComboBox2 のリストにセットします。
Me.ComboBox2.RowSource = Me.ComboBox1.Value

こんな感じです。

やり方はいくつもあるのですが、とりあえず簡単な方法。
都道府県名のリストと、市町村名のリストをワークシートに書いておく方法です。

まず最初に都道府県名のリストを作成します。
Sheet1(シートはどこでも構いません)の A1 に「東京都」A2 に「栃木県」A3 に「茨城県」と入力します。
(本番では A1 から下に向かって都道府県名を入力していってください。)

全部入力が終わったら A1~A3(47都道府県を入力したのなら A47 まで)を選択し、Excel ツールバーの左端の「名前ボックス」に「都道府県...続きを読む

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QエクセルVBA ユーザーフォーム 複数のコンボボックス 同一リスト

ユーザーフォームにコンボボックスが複数あります。
その内の3つについては、同一のリストを設定します。
リストの個数は30個ぐらいで、できればセルを使用
したくありません。
下記を3回記述するよりも短くしたいのですが、どのよ
うな方法がありますでしょうか?
現状では、ComboBox1、4、6ですが、連番にする必要が
あれば、変更可能です。
With ComboBox1
.Clear
.AddItem "いくら"
.AddItem "たこ"
.AddItem "まぐろ"
・・・
End With
お手数ですがよろしくお願いします。

Aベストアンサー

下記で如何でしょう。

Dim myArr As Variant
Dim i As Variant
myArr = Array("1", "4", "6")
For Each i In myArr
   With Me.Controls("ComboBox" & i)
      .Clear
      .AddItem "いくら"
      .AddItem "たこ"
      .AddItem "まぐろ"
   End With
Next

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QExcel VBA コンボボックスの初期値の設定について

いつもお世話になっています。
Excel VBA コンボボックスの初期値の設定について教えてください。
ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。
コンボボックスのボタンを押すとちゃんと
「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。

ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。
よろしくお願いします。

Aベストアンサー

UserForm Initialize
ComboBox1.Text = ComboBox1.List(0)

QVBでコンボボックスとテキストボックスの連係

VBでフォームにデータコンボボックスとテキストボックスを一つづつ作り、データコンボボックスで値を選択し、その値に対する値をテキストボックスに表示させたいんですがどうすればいいでしょうか?
データコンボボックスで選択する元になるテーブルは
ID | 商品
1 | みかん
2 | ばなな
3 | りんご
と、上記のような形のテーブルをもちいています。
例えばデータコンボボックスで「1」を選択した場合テキストボックスに「みかん」と表示させたいです。

Aベストアンサー

データコンボ cmbData
テキスト txtData
として、cmbDataがレコードとリンクしているものと仮定しています。

1.cmbData.BoundColumnが商品名、cmbData.DataFieldがID とする
2.Clickイベントに、以下を設定する

Private Sub cmbData_Click(Area As Integer)
txtData.Text = cmbData.BoundText
End Sub

3.商品名がテキストに表示されます。


P.S
フォーカス取得時も、処理を入れておくと起動時も商品名が表示されるよ。
Private Sub cmbData_GotFocus()
txtData.Text = cmbData.BoundText
End Sub


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

人気Q&Aランキング