it

コンボボックスのVBAでの使い方は?Excelでの実装方法も!(フォーム作成・値の取得・イベント処理・マクロ・プロパティ設定)

当サイトでは記事内に広告を含みます

ExcelのVBA(Visual Basic for Applications)を使って、ユーザーフォームにコンボボックスを設置し、データ入力の効率化や入力ミスの防止を図るケースは非常に多いでしょう。

本記事では、VBAでコンボボックスを実装する基本的な方法から、値の設定・取得・イベント処理・プロパティ設定まで、実際のコード例とともに詳しく解説していきます。

VBA初心者から中級者まで、すぐに実践に活かせる内容となっています。

VBAコンボボックスの基本的な作り方

それではまず、ExcelのVBAでコンボボックスを配置する基本的な手順について解説していきます。

ユーザーフォームへのコンボボックスの配置

VBAでコンボボックスを使う最も一般的な方法は、ユーザーフォームに配置することです。

ユーザーフォームへのコンボボックス配置手順

1. VBAエディター(Alt+F11)を開く

2. 挿入メニュー → ユーザーフォームを選択

3. ツールボックスから「コンボボックス」をフォームにドラッグ配置

4. プロパティウィンドウでNameプロパティを設定(例:cboFruit)

フォームに配置したコンボボックスには、わかりやすい名前(プレフィックスにcboを使う命名規則が一般的)をNameプロパティで設定しておきましょう。

AddItemメソッドで選択肢を追加する

コンボボックスに選択肢を追加するには、AddItemメソッドを使います。

通常、フォームのInitializeイベントで選択肢を設定します。

AddItemによる選択肢の追加(UserForm_Initialize内)

Private Sub UserForm_Initialize()

‘ コンボボックスに選択肢を追加

cboFruit.AddItem “りんご”

cboFruit.AddItem “バナナ”

cboFruit.AddItem “みかん”

cboFruit.AddItem “ぶどう”

‘ デフォルト選択の設定

cboFruit.ListIndex = 0 ‘ 最初の項目を選択

End Sub

Excelのセル範囲から選択肢を設定する

選択肢をマクロにハードコードするより、Excelのセルに入力されたデータをコンボボックスの選択肢として使う方が保守しやすいです。

セル範囲から選択肢を設定する方法

Private Sub UserForm_Initialize()

Dim ws As Worksheet

Set ws = ThisWorkbook.Sheets(“マスターデータ”)

Dim lastRow As Long

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Dim i As Long

For i = 2 To lastRow ‘ 2行目からデータ最終行まで

cboFruit.AddItem ws.Cells(i, 1).Value

Next i

End Sub

または、RowSourceプロパティを使ってセル範囲を直接指定する方法もシンプルです。

コンボボックスの主要プロパティの設定

続いては、VBAコンボボックスのよく使う主要プロパティの設定方法について確認していきましょう。

よく使う主要プロパティ一覧

プロパティ名 説明 設定例
Name コントロールの名前 cboFruit
Value 現在選択されている値 cboFruit.Value = “りんご”
ListIndex 選択されている項目のインデックス(0始まり) cboFruit.ListIndex = 0
RowSource 選択肢として使うセル範囲 cboFruit.RowSource = “Sheet1!A2:A10”
Style 0=編集可能、2=リストのみ選択可 cboFruit.Style = 2
Enabled 有効/無効の切り替え cboFruit.Enabled = False

Styleプロパティでコンボボックスとドロップダウンを切り替える

Styleプロパティは、コンボボックスの動作モードを切り替える重要なプロパティです。

fmStyleDropDownCombo(値:0)は編集可能モードで、テキスト入力と選択の両方が可能です。

fmStyleDropDownList(値:2)はリスト選択専用モードで、定義済みの選択肢からのみ選択できます。

入力値の誤りを防ぎたい場合(データの一貫性が重要な場合)は、fmStyleDropDownList(値:2)を使うことが推奨されます。

AutoCompleteとMatchEntryの設定

コンボボックスのMatchEntryプロパティを使うことで、入力した文字列に一致する選択肢への自動移動の動作を設定できます。

fmMatchEntryFirstLetter(値:0)は入力した最初の文字に一致する項目に移動します。

fmMatchEntryComplete(値:1)は入力した文字列全体に一致する最初の項目に移動します。

コンボボックスの値の取得とイベント処理

続いては、コンボボックスで選択された値の取得方法と、主要なイベント処理について確認していきましょう。

選択値の取得方法

コンボボックスで選択された値を取得するには主に2つの方法があります。

選択値の取得方法

‘ 方法1:Valueプロパティ(表示テキストを取得)

Dim selectedFruit As String

selectedFruit = cboFruit.Value

‘ 方法2:ListIndexプロパティ(インデックスを取得)

Dim selectedIndex As Integer

selectedIndex = cboFruit.ListIndex

‘ 選択されていない場合、ListIndexは-1になる

If cboFruit.ListIndex = -1 Then

MsgBox “項目を選択してください”

End If

Changeイベントを使った連動処理

コンボボックスのChangeイベントは、選択内容が変わったときに自動的に実行される処理を定義するのに使います。

Changeイベントの実装例(都道府県選択で市区町村を連動)

Private Sub cboPrefecture_Change()

‘ 市区町村コンボボックスをクリア

cboCity.Clear

‘ 選択された都道府県に応じて市区町村を追加

Select Case cboPrefecture.Value

Case “東京都”

cboCity.AddItem “新宿区”

cboCity.AddItem “渋谷区”

cboCity.AddItem “港区”

Case “大阪府”

cboCity.AddItem “北区”

cboCity.AddItem “中央区”

End Select

End Sub

カスケード(連動)コンボボックスを実現することで、ユーザーの入力ミスを防ぎ、より構造化されたデータ入力フォームを作成できます。

OKボタン処理と入力値の検証

フォームのOKボタン(送信ボタン)処理では、コンボボックスの値を検証してからExcelシートに書き込む処理を実装します。

OKボタン処理の例

Private Sub btnOK_Click()

‘ 入力検証

If cboFruit.ListIndex = -1 Then

MsgBox “果物を選択してください”, vbExclamation

Exit Sub

End If

‘ 選択値をシートに書き込む

Dim ws As Worksheet

Set ws = ThisWorkbook.Sheets(“データ”)

Dim nextRow As Long

nextRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1

ws.Cells(nextRow, 1).Value = cboFruit.Value

‘ フォームを閉じる

Unload Me

End Sub

ワークシート上のコンボボックスの活用

続いては、ユーザーフォームではなく、Excelのワークシート上に直接配置するコンボボックスの使い方について確認していきましょう。

ワークシート上へのコンボボックスの配置

Excelのワークシートに直接コンボボックスを配置する方法もあります。

開発タブ → 挿入 → フォームコントロールまたはActiveXコントロールのコンボボックスを選択し、ワークシート上に描画します。

フォームコントロールはVBAによる細かい制御が不要な場合のシンプルな選択肢です。

ActiveXコントロールは、VBAでより細かくイベント処理やプロパティを制御できます。

ActiveXコンボボックスのイベント処理

ワークシート上のActiveXコンボボックスのイベントは、そのワークシートのコードモジュールに記述します。

ワークシート上のActiveXコンボボックスのイベント処理

‘ シートのコードモジュールに記述

Private Sub ComboBox1_Change()

‘ 選択値を隣のセルに表示

Range(“B1”).Value = ComboBox1.Value

End Sub

データの入力規則との使い分け

ワークシートのセルに選択肢を設けたい場合、VBAのActiveXコンボボックスの他に、Excelの標準機能のデータの入力規則(リスト)も有効な選択肢です。

データの入力規則のリストは、VBAなしで設定できる手軽さがあり、指定したセル範囲の値から選択できるドロップダウンを実現できます。

複雑なイベント処理や動的な選択肢の変更が不要であれば、データの入力規則の方がシンプルで保守しやすい場合があります。

まとめ

本記事では、VBAでのコンボボックスの基本的な作り方(ユーザーフォームへの配置・AddItemメソッド・RowSource)、主要プロパティの設定、値の取得・Changeイベント処理、ワークシート上での活用方法について解説しました。

VBAのコンボボックスは、Excelでのデータ入力フォームの効率化と入力ミスの防止に非常に効果的なUI部品です。

Changeイベントを使ったカスケード連動、StyleプロパティによるモードとOKボタンでの入力検証を組み合わせることで、使いやすく堅牢な入力フォームが実現できるでしょう。