大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAのコンボボックスでリストを作成する方法とコンボボックスで選択した値を取得する方法についてご紹介します。リスト作成はコンボボックスの初期値にAddItemもしくはListを使えばできます。

はじめに

訪問ありがとうございます。この記事ではコンボボックスの使い方についてご紹介します。

コンボボックスのリストの作成と選択した値をセルへ入力する方法について説明します。

ユーザーフォームのコンボボックスとワークシート上で使うフォームコントロール、ActiveX コントロールがあります。

コンボボックスを使えばリストの中から値を取得してセルへ入力などできますので便利です。

この記事で紹介すること

  • コンボボックスのリストを作成する方法
  • コンボボックスで選択した値をセルへ入力する方法

目次から見たい項目へ移動すると便利ですよ。

目次

Excel VBAのユーザーフォームのコンボボックス

Excel VBAのユーザーフォームのコンボボックスについて使い方を紹介します。

コンボボックスはこんなやつです。

コンボボックス

リストの中から任意のデータを指定することができます。

ツールボックスからコンボボックスをユーザーフォームの中にドラック&ドロップで挿入することができます。

ツールボックスの中のコンボボックスの位置

コンボボックスのリスト作成とセルへの入力方法について説明していきます。

コンボボックスのリスト作成

コンボボックスのリスト作成について説明します。

リスト作成

リスト作成は『AddItem』を使えばできます。

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』という形で入力します。

これで複数列のリストを作成することができます。

作成した結果です。

コンボボックスで複数列のリストを作成

3列のリストが作成されています。

リストを更新

リストボックスに入力したデータを更新する方法を説明します。

セルからリストを作成していたとしてセルに入力されたリストが変更になった際にコンボボックスのリストも変更したい場合です。

ボタンを一つ追加してこのボタンにリストを更新する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』でリストを作成しています。

VBAコードを実行してみます。

リストを変更する前です。

コンボボックスのリスト更新前

セルの『高橋』を『タカハシ』にして『リスト更新』ボタンを押してみます。

コンボボックスのリストを更新

コンボボックスのリストが『タカハシ』に更新されました。

ちなみにユーザーフォームを表示した状態でセルを変更できるようにするにはユーザーフォームの『プロパティ』で『ShowModal』を『False』にすればできます。

ユーザーフォーム表示中でもセルを変更できるようにするためShowModalをFalseに変更

ちょっと小ネタでした。話を戻します。

セルからリストを作成する場合は次の方法が簡単なのでおおすすめです。

セルと連動したリスト作成

セルと連動したコンボボックスのリスト作成について説明します。

セルからリストを作成する場合はこの方法が簡単です。

VBA画面で『プロパティ』を表示させて、コンボボックスを選択します。

『プロパティ』の『RowSource』のところにコンボボックスのリストに入力したいセル範囲を指定します。

プロパティの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関数で行番号から『佐藤』を取得しています。

やり方を説明します。

まず、『開発』タブの『挿入』からシートへフォームを挿入します。

フォームコントロールのコンボボックス

挿入したらフォームを右クリックして『コントロール書式設定』を選択します。

コントロール書式設定をクリック

書式設定の『コントロール』タグを選択します。

コンボボックスのリストに入れたいセルの範囲を『入力範囲』に設定します。

コンボボックスで選択した値を入力するセルを『リンクするセル』に設定します。

コントロール書式の設定

あとは、セルで『Index』の数式を設定します。

INDEXの数式を設定する

これで完成です。数式を入れないといけないので少し面倒ですがコンボボックスのリスト作成とセルへの入力ができます。

ActiveXのコンボボックス

ActiveX コントロールでもコンボボックスが使えます。

こんな感じで使えます。

ActiveXのコンボボックスの使用例

シートからコンボボックスのリストを取得して、選択した値『鈴木』をセルへ入力しています。

やり方を説明します。

まずは『開発』の『挿入』からシートへコンボボックスを挿入します。

シートへActiveXのコンボボックスを挿入

ActiveXのコンボボックスを設定するため『デザインモード』にします。

デザインモードにする

デザインモードにした後コンボボックスで右クリックをして『プロパティ』を選択します。

プロパティを選択

プロパティが表示されます。

コンボボックスのリストに入力したいセル範囲を『ListFillRange』に設定します。

コンボボックスで選択した値と連動したいセルを『LinkedCell』に設定します。

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

これでActiveXのコンボボックスが使えます。シートでコンボボックスを使う際はActiveX コントロールがおすすめです。

おわりに

この記事ではコンボボックスのリストを作成する方法と選択した値をセルに入力する方法について紹介しました。

コンボボックスを使えばリストの中から値を取得してセルへ入力などできますので便利です。

ワークシート上でコンボボックスを使う場合は、フォームコントロール、ActiveXを使う方法があります。

ワークシート上でコンボボックスを使う場合はActiveX コントロールがおすすめです。

ご参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す