VBAのユーザーフォームでコンボボックスの複数列の表示方法
前回の記事ではVBAのユーザーフォームでコンボボックスを表示する方法を紹介しましたが、今回はコンボボックスで複数の列を同時に表示する方法を紹介します。
画像と一緒に解説しますので、この記事を読みながら一緒に作業してみましょう。
コンボボックスで複数列の表示方法
まずはコンボボックスを呼び出し、好きな大きさに配置しましょう。
もしコンボボックスの配置手順が分からない場合は以下の記事を参考にしましょう。
複数列表示するためのコード
ユーザーフォーム上をダブルクリックし、以下のコードを入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Private Sub UserForm_initialize() Dim i As Long With ComboBox1 .ColumnCount = 3 '選択時の表示列数 .TextColumn = 2 '選択後の表示列 .ColumnWidths = "35;35;35" '列幅 For i = 2 To 5 .AddItem "" .List(.ListCount - 1, 0) = Cells(i, 2) .List(.ListCount - 1, 1) = Cells(i, 3) .List(.ListCount - 1, 2) = Cells(i, 4) Next i End With End Sub |
最初のinitializeは、ユーザーフォームを開いたときの最初に起こる内容という意味です。
Dim i As Longは変数ですが、もし分からない方は使い方についてVBAの変数とは?使い方と代表的な型の解説を見てみましょう。
ここではComboBoxのみ解説します。
ColumnCount | 選択時の表示列数 |
TextColumn | 選択後の表示列 |
ColumnWidths | 列幅 |
画像で説明すると以下のようになります。
.AddItem “”
Next i
上記のコードに関しては2行目から5行目に入力されている文字を参照してリストを追加するという意味です。
For ~ Nextは別記事で紹介していきたいと思いますので、今はあまり気にせずにコピペで使用しましょう。
最終行を自動で取得する場合
先ほどは参照する行を指定していましたが、実際の業務になるとデータが日々増減することも多いため、入力している最終の行まで参照したいことも多いでしょう。
その場合は以下のコードとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub UserForm_initialize() Dim i As Long Dim j As Integer j = Range("B2").End(xlDown).Row 'B2から下に向かって最終行を取得 With ComboBox1 .ColumnCount = 3 '選択時の表示列数 .TextColumn = 2 '選択後の表示列 .ColumnWidths = "35;35;35" '列幅 For i = 2 To j .AddItem "" .List(.ListCount - 1, 0) = Cells(i, 2) .List(.ListCount - 1, 1) = Cells(i, 3) .List(.ListCount - 1, 2) = Cells(i, 4) Next i End With End Sub |
最終行を取得する方法は複数あります。詳しくはVBAで表の最終行を選択する方法で解説しています。
まとめ
今回はVBAのコンボボックスで複数の列を表示する方法について紹介しました。
私も実際に業務でユーザーフォームを作ったとき、1列だけでなく複数の列を使うことが多くありました。
コードは完全に覚えなくてもコピペで応用すると便利なため、当サイトのコードをコピペしながら是非活用していきましょう。
Excelの機能を使いこなすと、仕事の効率化から大きな時間短縮に繋がります。
仕事術のスキルが増えるとプライベートの時間を時間を増やすことができますので、当サイトで得た知識を是非活用していきましょう。
以下のExcel記事もおすすめです。