大体でIT
大体でIT
2020/8/30
Excel VBAのコンボボックスでリストを作成する方法とコンボボックスで選択した値を取得する方法についてご紹介します。リスト作成はコンボボックスの初期値にAddItemもしくはListを使えばできます。
訪問ありがとうございます。この記事ではコンボボックスの使い方についてご紹介します。
コンボボックスのリストの作成と選択した値をセルへ入力する方法について説明します。
ユーザーフォームのコンボボックスとワークシート上で使うフォームコントロール、ActiveX コントロールがあります。
コンボボックスを使えばリストの中から値を取得してセルへ入力などできますので便利です。
コンボボックスのリストを作成する方法
コンボボックスで選択した値をセルへ入力する方法
Excel VBAのユーザーフォームのコンボボックス
Excel VBAのユーザーフォームのコンボボックスについて使い方を紹介します。
リストの中から任意のデータを指定することができます。
ツールボックスからコンボボックスをユーザーフォームの中にドラック&ドロップで挿入することができます。
コンボボックスのリスト作成とセルへの入力方法について説明していきます。
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "鈴木"
.AddItem "佐藤"
.AddItem "高橋"
.AddItem "伊藤"
.AddItem "田中"
End With
End Sub
このコードは『フォームの中のコード』に記載します。
『Private Sub UserForm_Initialize()』はフォームを開いた際に実行するイベントコードです。
コンボボックスの名前が『ComboBox1』なので、『ComboBox1.AddItem 〇〇』でリストを追加することができます。
VBAコードを実行するとこんな感じでコンボボックスの中にリストを作成することができます。
ただ毎回VBAコードに記載していると面倒なのでセルからリストを作成してみます。
ワークシートのセルからリストを作成するVBAコードです。
'セルからリスト作成
Private Sub UserForm_Initialize()
With ComboBox1
For i = 2 To 6
.AddItem ActiveSheet.Cells(i, 1)
Next
End With
End Sub
セルの値をコンボボックスのリストに入力するので、『.AddItem ActiveSheet.Cells(i, 1)』というように記載します。
先ほどと同じようにリストを作成できます。こんな感じです。
『AddItem 〇〇』の〇〇を変更すればリストの値を自由に変更することができます。
複数列のリストを作成する場合は『List』を使います。VBAコードはこのようになります。
Private Sub UserForm_Initialize()
'コンボボックスに入力する値を取得
With ActiveSheet
a = .Range(.Cells(2, 1), .Cells(6, 3)).Value
End With
'コンボボックスのリストを作成
With ComboBox1
.ColumnCount = 3 '列数
.List() = a 'リストに配列を入れる
End With
End Sub
最初にリストに入力する値をセルから取得しています。『a = .Range(.Cells(2, 1), .Cells(6, 3)).Value』
リストの列数を『.ColumnCount = 3』で指定します。
リストに登録する値を『List() = a』という形で入力します。
リストボックスに入力したデータを更新する方法を説明します。
セルからリストを作成していたとしてセルに入力されたリストが変更になった際にコンボボックスのリストも変更したい場合です。
ボタンを一つ追加してこのボタンにリストを更新するVBAコードを記載します。
このリスト更新のボタンに次のVBAコードを記載します。
'リスト更新
Private Sub CommandButton1_Click()
With ComboBox1
.Clear
For i = 2 To 6
.AddItem ActiveSheet.Cells(i, 1)
Next
End With
End Sub
一旦コンボボックスのリストを『.Clear』で削除して再度『AddItem』でリストを作成しています。
セルの『高橋』を『タカハシ』にして『リスト更新』ボタンを押してみます。
コンボボックスのリストが『タカハシ』に更新されました。
ちなみにユーザーフォームを表示した状態でセルを変更できるようにするにはユーザーフォームの『プロパティ』で『ShowModal』を『False』にすればできます。
セルからリストを作成する場合は次の方法が簡単なのでおおすすめです。
セルと連動したコンボボックスのリスト作成について説明します。
セルからリストを作成する場合はこの方法が簡単です。
VBA画面で『プロパティ』を表示させて、コンボボックスを選択します。
『プロパティ』の『RowSource』のところにコンボボックスのリストに入力したいセル範囲を指定します。
これだけでコンボボックスのリストを作成できますし、セルの入力を変更すればコンボボックスのリストも自動的に変更されます。
まずセルからコンボボックスのリストが作成されています。
次にセルの入力を変更してみます。『伊藤』を『イトウ』に変更してみます。
特定のセルからリストを作成したい場合は簡単で便利な使い方です。
ただし、AddItemの方法と組み合わせるとエラーとなってしまいますので注意です。
コンボボックスで選択した値をセルへ入力する方法です。
ユーザーフォームにボタンを追加してセルへ入力する方法があります。
'ボタンでセルに入力
Private Sub CommandButton1_Click()
ActiveSheet.Cells(2, 2) = ComboBox1.Text
End Sub
コンボボックスで選択した値は、『ComboBox1.Text』で取得できます。
この値を使って『ActiveSheet.Cells(2, 2) = ComboBox1.Text』というようにセルへ値を入力しています。
セルB2のところにコンボボックスで選択した値が入力されています。
毎回ボタンを押していたら大変という場合は次の自動でセルに入力する方法があります。
コンボボックスで選択された値を自動でセルに入力する方法です。
VBAコードは次のようになります。これも『フォームのコード』へ記載します。
'自動でセルに入力
Private Sub ComboBox1_Change()
ActiveSheet.Cells(2, 2) = ComboBox1.Text
End Sub
コンボボックスの値が変更されたら実行するイベントコード『Private Sub ComboBox1_Change()』を使用しています。
このコードの中にコンボボックスの値をセルへ入力するコードを記載しています。
このVBAコードを実行するとこんな感じになります。
コンボボックスで『田中』を選択したらセルB2に『田中』が自動で入力されています。
毎回ボタンをクリックするのが大変という場合は自動でセルへ入力する方法をおすすめします。
補足ですがワークシートでもコンボボックスが使えます。
フォームコントロールとActiveX コントロールがありますのでご紹介します。
フォームコントロールでコンボボックスを使うこともできます。
セルのリストの列からコンボボックスにリストを表示して、『佐藤』を選択してセルへ入力しています。
セルへ入力される値は選択したリストの『行番号』になりますので、INDEX関数で行番号から『佐藤』を取得しています。
まず、『開発』タブの『挿入』からシートへフォームを挿入します。
挿入したらフォームを右クリックして『コントロール書式設定』を選択します。
コンボボックスのリストに入れたいセルの範囲を『入力範囲』に設定します。
コンボボックスで選択した値を入力するセルを『リンクするセル』に設定します。
これで完成です。数式を入れないといけないので少し面倒ですがコンボボックスのリスト作成とセルへの入力ができます。
ActiveX コントロールでもコンボボックスが使えます。
シートからコンボボックスのリストを取得して、選択した値『鈴木』をセルへ入力しています。
まずは『開発』の『挿入』からシートへコンボボックスを挿入します。
ActiveXのコンボボックスを設定するため『デザインモード』にします。
デザインモードにした後コンボボックスで右クリックをして『プロパティ』を選択します。
コンボボックスのリストに入力したいセル範囲を『ListFillRange』に設定します。
コンボボックスで選択した値と連動したいセルを『LinkedCell』に設定します。
これでActiveXのコンボボックスが使えます。シートでコンボボックスを使う際はActiveX コントロールがおすすめです。
この記事ではコンボボックスのリストを作成する方法と選択した値をセルに入力する方法について紹介しました。
コンボボックスを使えばリストの中から値を取得してセルへ入力などできますので便利です。
ワークシート上でコンボボックスを使う場合は、フォームコントロール、ActiveXを使う方法があります。
ワークシート上でコンボボックスを使う場合はActiveX コントロールがおすすめです。
ご参考になればと思います。最後までご覧くださいましてありがとうございました。