|
Sample Macro コントロール・コンボボックス |
 |
|
|
|
3-1) コンボボックスのリストをセットする (1列型) |
 |
 |
'=========================================================================================
Private Sub UserForm_Initialize() 'ユーザーフォームを初期化する
10 For I = 0 To 7 'Iが0から7まで(2行-2から9行-2まで)
20 ComboBox1.AddItem Worksheets("名簿").Cells(I + 2, 2).Value '名簿シートのB列
30 Next '繰り返す
End Sub
'-----------------------------------------------------------------------------------------
<コメント>
※1 コンボボックスは、ユーザーフォームに作成する
※2 マクロは、作成したユーザーフォームのコードに記入する
※3 このマクロは、DBシートのB列の氏名を、コンボボックスのリストにセットしている
※4 20行目のAddItemメソッドで、名簿シートの内容をリストにセットしている
※5 10から30行目のコードで、名簿シートの2行目から9行目まで、反復処理している
※6 Initializeイベントで、このマクロが実行される
【名簿シート】 【コンボボックス】

サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox1_AddItem.xls 46KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-2) コンボボックスのリストをセットする (2列型) |
 |
 |
'=========================================================================================
Private Sub UserForm_Initialize() 'ユーザーフォームを初期化する
10 ComboBox1.ColumnCount = 2 'コンボボックスの列は2列にする
20 For I = 0 To 7 'Iが0から7まで(2行-2から9行-2まで)
30 ComboBox1.AddItem Worksheets("名簿").Cells(I + 2, 1).Value '名簿シートのA列
40 ComboBox1.List(I, 1) = Worksheets("名簿").Cells(I + 2, 2).Value '同じくB列
50 Next '繰り返す
End Sub
'-----------------------------------------------------------------------------------------
<コメント>
※1 コンボボックスは、ユーザーフォームに作成する
※2 マクロは、作成したユーザーフォームのコードに記入する
※3 このマクロは、DBシートのB列の氏名を、コンボボックスのリストにセットしている
※4 10行目のColumnCountプロパティで、列の数を設定している
※5 30行目のAddItemメソッド、40行目のListプロパティで、名簿シートの内容をリストにセットしている
※6 20から50行目のコードで、名簿シートの2行目から9行目まで、反復処理している
※7 Initializeイベントで、このマクロが実行される
【名簿シート】 【コンボボックス】

サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox2_AddItem.xls 45KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-3) コンボボックスのリストをセットする (重複除去) |
 |
 |
'=========================================================================================
Private Sub UserForm_Initialize() 'ユーザーフォームを初期化する
Dim リスト As New Collection
Dim 列 As String, 上端セル As String, 最下端セル As String
Dim セル範囲 As Range, 各セル As Range
'
列 = "B" '※3
上端セル = 列 & "2" '※4
最下端セル = 列 & "65536"
With Worksheets("SSS") '※5
Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp))
End With
For Each 各セル In セル範囲 'セル範囲の各セルについて繰り返し処理
On Error Resume Next '次行が実行時エラーならその次行から継続
リスト.Add 各セル.Value, CStr(各セル.Value) 'Collectionオブジェクトにメンバを追加
If Err.Number = 0 Then '実行時エラーが発生していなければ
Me.ComboBox1.AddItem 各セル.Value 'コンボボックスのリストに項目を追加
End If
On Error GoTo 0
Next
End Sub
'=========================================================================================
<コメント>
※1 コンボボックスはユーザーフォームに作成する
※2 このマクロはユーザーフォームのコードに記入する
※3 'B' にはコンボボックスのリストにセットするワークシートの列名を記入
※4 '2' には※3の列のデータの最上行を記入(この例は1行目に見出し行がある前提)
※5 'SSS' にはシート名を記入(並べ替え済のこと)
※6 重複のあるデータでもオートフィルタのリストのように重複を除去して表示される

※7 詳細説明 … Collectionオブジェクトにメンバを追加するAddメソッドとは
サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox1_Cyofuku.xls 42KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-4) コンボボックスのリストをセットする (配列から) |
 |
 |
'=========================================================================================
' ◆ユーザーフォームのコード◆
'-----------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Dim 配列(4)
配列(0) = "りんご"
配列(1) = "バナナ"
配列(2) = "みかん"
配列(3) = "メロン"
配列(4) = "ぶどう"
ComboBox1.List = 配列 'コンボボックスのリストに配列の値をセットする
End Sub
'-----------------------------------------------------------------------------------------
Private Sub ComboBox1_Change()
MsgBox ComboBox1.ListIndex '選択された行のインデックス番号を取得して表示
End Sub
'=========================================================================================
関連ページ: コンボボックスで選択されたリストに対応する配列の番号を取得するには
|
3-5) 選択されたら2列目を表示する (2列型) |
 |
 |
'=========================================================================================
Private Sub UserForm_Initialize() 'ユーザーフォームを初期化する
10 ComboBox1.ColumnCount = 2 'コンボボックスの列は2列にする
20 For I = 0 To 7 'Iが0から7まで(2行-2から9行-2まで)
30 ComboBox1.AddItem Worksheets("名簿").Cells(I + 2, 1).Value '名簿シートのA列
40 ComboBox1.List(I, 1) = Worksheets("名簿").Cells(I + 2, 2).Value '同じくB列
50 Next '繰り返す
60 ComboBox1.TextColumn = 2 '選択されたら2列目を表示する
End Sub
'-----------------------------------------------------------------------------------------
<コメント>
※1 前のケース(3-2)のコンボボックスで、選択されたら2列目(漢字氏名)を表示する
※2 10から50行目までは、前のケースと同じ
※3 60行目の TextColumnプロパティで、選択されたときに格納する列を設定している
【名簿シート】 【コンボボックス】

関連ページ: 2列型のコンボボックスで選択されたら2列目を表示してその値を取得するには?
サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox2_TextColumn.xls 45KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-6) 1文字目一致で入力候補を表示する |
 |
 |
'=========================================================================================
' ◆ユーザーフォームのコード◆
'-----------------------------------------------------------------------------------------
'ユーザーフォームを初期化するイベントマクロ
'-----------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
ComboBox1.MatchEntry = fmMatchEntryFirstLetter '※1 「1文字目一致検索」に設定する
End Sub
'=========================================================================================
<コメント>
※1 MatchEntryプロパティを、「1文字目一致検索」に設定している
くわしくはサンプルブックの「解説」シートを参照
【コンボボックス】
サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox1_AutoComplete.xls 47KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-7) コンボボックスのIMEモードを設定する |
 |
 |
'=========================================================================================
' ◆ユーザーフォームのコード◆
'-----------------------------------------------------------------------------------------
'ユーザーフォームを初期化するイベントマクロ
'-----------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
ComboBox1.IMEMode = fmIMEModeHiragana '※1 IMEを全角ひらがなモードでオンにする
End Sub
'=========================================================================================
<コメント>
※1 IMEModeプロパティの引数は、サンプルブックの「解説」シートを参照
※2 IME(Input Method Editor)とは、アジア言語のテキストを入力するためのプログラム
【コンボボックス】
サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox1_IME.xls 47KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-8) 入力・選択時に動作するイベントマクロ |
 |
 |
'=========================================================================================
' ◆ユーザーフォームのコード◆
'-----------------------------------------------------------------------------------------
'コンボボックスに新しい文字列値を入力または選択したとき動作するイベントマクロ
'-----------------------------------------------------------------------------------------
Private Sub ComboBox1_Change() '※1
Worksheets("SSS").Range("E10").Value = ComboBox1.Text '※2 選択結果をセルにセットする
End Sub
'=========================================================================================
<コメント>
※1 Changeイベントはコンボボックスなどで、新しい文字列値を入力または選択したときに発生する
※2 Textプロパティで値を取得して、セルにセットしている
くわしくはサンプルブックの「解説」シートを参照

コンボボックスで入力または選択されると、
すぐにセルへセットしている
サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox1_AutoComplete.xls 47KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-9) OKボタンクリックで動作するイベントマクロ |
 |
 |
'=========================================================================================
' ◆ユーザーフォームのコード◆
'-----------------------------------------------------------------------------------------
'「OK」ボタンが押されたときに動作するイベントマクロ
'-----------------------------------------------------------------------------------------
Private Sub CommandButton1_Click() '※1
If ComboBox1.MatchFound Then '※2 一致する項目がリストの中にあれば
Unload Me 'ユーザーフォームを閉じる
Else 'なければ
MsgBox "やり直してください", vbExclamation, "みつかりません"
End If
End Sub
'=========================================================================================
<コメント>
※1 Clickイベントはコマンドボタンなどが、クリックされたときに発生する
※2 MatchFoundプロパティで、一致する項目がリストの中あったか聞いている
くわしくはサンプルブックの「解説」シートを参照
サンプルブックのダウンロードは ここをクリック (YNxv233_ComboBox1_AutoComplete.xls 47KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3-10) コンボボックスのリスト項目をクリアする |
 |
 |
'-----------------------------------------------------------------------------------------
Sub コンボボックスのリスト項目をすべて削除する()
UserForm1.ComboBox1.Clear
End Sub
'-----------------------------------------------------------------------------------------
|