Excel VBA コンボボックスのテキストとすべてのリストを取得する

コントロール作成/操作

ユーザーフォーム上に設置されているコンボボックスの、テキスト部分に入力されているテキストの取得と、登録されているすべてのリストを取得する方法についてご説明します。

コンボボックスは登録されているリストから選択して、選択された文字列をテキストに表示させるコントロールです。

テキスト部分の取得方法はもちろんですが、処理の中には登録されているリストを取得したい場合はあります。

そんなテキストとリストの取得方法についてです。

その他のコンボボックスの操作方法ついては下記記事をご覧ください。

1.サンプルデータの説明

使用するフォームとコントロール

コンボボックスのテキスト部分に入力されているテキストを取得する方法です。

次のようにコンボボックスを追加したユーザーフォームを使用します。

取得するコードを実行するために「テキスト取得」と「リスト取得」のコマンドボタンを2つ用意しています。

コンボボックスには以下リストを登録します。

フォームの表示とリストの登録

今回は表示後の説明が本題ですが、表示するまでの過程も簡単にご説明します。

フォームの表示

上記ユーザーフォームを表示させます。

標準モジュールに以下コードを記述します。

Sub FormShow()

    UserForm1.Show vbModeless
    
End Sub
リストの登録

ユーザーフォームを表示する際に、上記のリストをコンボボックスへ登録する必要があります。

表示する際に登録する場合はUserForm1のInitializeイベントで登録します。

ユーザーフォームのInitializeイベントについては「Initializeイベント 表示される時に実行」をご覧ください。

フォームモジュールに下記コードを記述します。

Private Sub UserForm_Initialize()

Dim i      As Long
Dim MaxRow  As Long

'リストの最終行を取得
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

With UserForm1

    '一度リストを削除する
    .Controls("ComboBox1").Clear
    
    For i = 2 To MaxRow
        
        'コンボボックスにリストを追加する
        .Controls("ComboBox1").AddItem Cells(i, 1).Value
    
    Next i

End With

End Sub

これで「Sub FormShow()」を実行してUserForm1を表示すると、A列のリストがコンボボックスに登録されます。

2.コンボボックスのテキスト部分を取得する

今回使用するフォームの準備が出来ましたので、本題のテキスト部分を取得する方法です。

テキストを取得するにはコンボボックスの「Value」プロパティを使用します。

次のように記述します。

Contents("コントロール名").Value

今回用意したコンボボックスのテキストを取得するには、次のように作成します。

標準モジュールに取得する部分を記述して、「テキスト取得」のコマンドボタンのClickイベントで呼び出します。

標準モジュール
Sub Text_Get()

With UserForm1
    
    'コンボボックス1のテキストを取得
    MsgBox .Controls("ComboBox1").Value
    
End With

End Sub
フォームモジュール
Private Sub CommandButton1_Click()
    Call Text_Get
End Sub

各コンボボックスにリストからテキストを選択して、「テキスト取得」のボタンを押すとコンボボックスのテキスト部分が取得されます。

3.リストをすべて取得する

次は登録されているリストをすべて取得する方法です。

リストをすべて取得するにはループを使用して、リストに登録されているテキストを取得します。

ループさせるためにはリストの数を取得しなければいけません。

登録されているリストの数は「ListCount」プロパティで取得出来ます。

リストのインデックスは0から始まるため、-1する必要があります。

次のように記述します。

Contents("コントロール名").ListCount-1

リストのインデックスを指定するには「List」プロパティで指定します。

次のように記述します。

Contents("コントロール名").List(番号)

リストの数の取得と、リストのインデックスの指定がわかりましたので、取得するコードを作成したいと思います。

コンボボックスのリストを順番に変数に格納して、最後にメッセージボックスに表示させます。

Sub List_Get()

Dim MyStr As String
Dim i     As Long

With UserForm1

    'コンボボックスのリスト数分ループする
    For i = 0 To .Controls("ComboBox1").ListCount - 1
        
        '登録されているリストを順番に取得する
        MyStr = MyStr & .Controls("ComboBox1").List(i) & vbCrLf
    
    Next i
    
    MsgBox MyStr

End With

End Sub
コードの説明

「.Controls(“ComboBox1”).ListCount – 1」でリストの数を取得しています。

リストのインデックスは0から始まるため、-1しています。

「.Controls(“ComboBox1”).List(i)」でループでリストのインデックスを順番に指定して、リストのテキストを取得します。

タイトルとURLをコピーしました