Excel プルダウンで複数選択する方法

入力規則のプルダウンメニューで

複数選択をしたい場合がありますが

単一選択しかサポートされていません。

しかし替わりとなる方法は存在します。

この記事では、その方法と特徴を紹介します。

二つの方法と特徴

実現方法は二つあります。

  1. チェックボックス
  2. 複数選択リストボックス

①チェックボックスの特徴

複数選択の代表例です。

チャックボックスのキャプチャ

簡単に実現できる利点がありますが、

選択肢が増えると場所を使ってしまうのと

手間が大きくなってしまうのが欠点です。

②複数選択リストボックス

プルダウンメニューを

そのまま複数選択にした感覚に近いです。

複数選択リストボックスのキャプチャ

スクロールすることが出来るため

選択肢が増えても場所を取らず

また手間も大きくならない利点があります。

複数選択リストボックスを折りたたんだ状態のキャプチャ

ただしリストボックスを複数選択にする場合、

マクロ・VBAを使用する必要があるため

ハードルが高いのが欠点です。

設定手順

共通・「開発」メニューを追加

どちらの方法を使うにしても

「開発」を使用します。

もしメニューに「開発」がない場合は

追加しておきましょう。

「開発」メニューの図解

メニューのないもない場所を右クリックし、

「リボンのユーザー設定」を選択します。

メニューのないもない場所を右クリックし、「リボンのユーザー設定」を選択する図解

「開発」にチェックを入れます。

すると「開発」がメニューに表示されます。

「開発」にチェックする図解

①チェックボックス

「開発」より「挿入」、「フォームコントロール」の

「チェックボックス」を選択します。

「開発」より「挿入」、「フォームコントロール」の「チェックボックス」を選択する図解

次にチェックボックスを

置きたい場所をクリックすると

チェックボックスが一つ追加されます。

チェックボックスが追加されたキャプチャ

チェックボックスを右クリックし

その状態でチェック1となっている

表記を左クリックすると編集可能です。

表記を変えた状態のキャプチャ

次に右クリックしてメニューを開き

「コントロールの書式設定」をクリックします。

右クリックしてメニューを開き「コントロールの書式設定」をクリックする図解

次にリンクするセルを設定します。

リンクするセルを設定する図解

この状態でチェックボックスを押すと

リンクしたセルに論理値が反映されます。

チェックがオン状態=TRUEのキャプチャ
チェックがオン状態=TRUE
チェックがオフ状態=FALSEのキャプチャ
チェックがオフ状態=FALSE

これを繰り返すことで複数選択が可能になります。

複数選択をチェックボックスで実現した状態のキャプチャ

なおチェック状態を数式に組み込む必要がない場合は

リンクするセルは設定の必要がありません。

②複数選択リストボックス

サンプルファイルと利用方法

サンプルファイルで使用可能です。

「リストボックス」シートに

複数選択リストボックスを置いてあります。

これを利用するだけなら

マクロの知識は不要です。

「リストボックス」シートのキャプチャ

「Work」シートの内容です。

A2セルから下に選択肢を記述します。

B2セルには選択した一覧が

カンマ区切りで表示されます。

C2セルから右にはセル別に

選択した一覧が表示されます。

「Work」シートのキャプチャ

この複数選択リストボックスは

そのままでは大きさの変更などが不可能です。

変更するには「開発」より

「デザインモード」を選択します。

「開発」より「デザインモード」を選択する図解

この状態でリストボックスを選択すると

大きさの変更が可能です。

このデザインモードはオンのままだと

項目選択が出来なくなるため

編集が終わったら再度、

クリックして解除しましょう。

なお初期状態では選択肢は4個までです。

これを増やすためにはデザインモードにして

リストボックスを右クリックし、

メニューの中から「プロパティ」を選択します。

リストボックスを右クリックしてプロパティを選択する図解

「プロパティ」ウインドウが表示され、

「ListFillRange」が選択肢のセル範囲です。

ここの範囲を大きくすると

4つ以上の選択肢に対応可能です。

「プロパティ」の「ListFillRange」で選択肢のセル範囲を設定する図解

作り方とソースコード(コメントによる解説)

自力で1から作成したり、

リストボックスを増やしたい方向けに

手順とソースコードを紹介します。

まず「開発」「挿入」「ActiveXコントール」より

「リストボックス」を選択し

配置する場所をクリックします。

(ActiveXコントールの方です。

 フォームコントロールの方は

 設定がうまく出来ませんでした)

「開発」「挿入」「ActiveXコントール」より「リストボックス」を選択する図解

リストボックスが配置されます。

リストボックスが配置された状態のキャプチャ

次に任意の位置に選択肢と

選択状態をリンクするセルを用意します。

選択肢とリンクセルのキャプチャ

そして「デザインモード」の状態で

右クリックし「プロパティ」を選択します。

「デザインモード」の状態で右クリックし「プロパティ」を選択する図解

プロパティの内容を変更します。

セルを指定する箇所はマウスで設定出来ません。

アドレスをキー入力する必要がある点に注意が必要です。

プロパティ設定値と説明
オブジェクト名マクロ・VBAからアクセスする変数名です。
必要であれば変更します。
LinkedCell選択肢の状態をリンクするセルです。
Workシートではリンクセル(結合)の位置を設定します。
リストボックスを増やす場合は
それぞれ異なるセルを設定。
ListFillRange選択肢の一覧を設定します。
Workシートに用意した選択肢セルを範囲で記述します。
MultiSelect「1 – fmMultiSelectMulti」に
変更すると複数選択になります。
プロパティ設定の図解

プロパティ設定完了後、

デザインモードのまま右クリックし

「コードの表示」を選択します。

右クリックメニューからコードの表示を選択する図解

Visual Basicエディターが立ち上がり、

List1_Click()が自動生成されますが、

それは無視してChangeを作成します。

キャプチャ。Visual Basicエディターが立ち上がりList1_Click()が自動生成。それは無視か削除をしてChangeを作成

ListBox1_Changeが追加されるので

ここにコードを入力していきます。

ListBox1_Changeが自動作成される図解

下記がChangeのコードです。

赤字はオブジェクト名によって変わる箇所です。

リストボックスを増やす場合は

ここを適宜変えていく必要があります。

Private Sub ListBox1_Change()
    Dim i As Integer ' リストボックスカウンター
    Dim j As Integer ' リンクセル(分割)カウンター
    Dim 結果 As String ' リストボックスの選択値をカンマ区切りで保存
    
    結果 = ""
    j = 1
    
    ' リストボックスの全要素をループ。ListCountは要素数
    For i = 0 To ListBox1.ListCount - 1
        ' リンクセル(分割)を一つづつ空白に戻す
        'Evaluate…アドレスから範囲を取得。シート名指定(!)がある場合はRangeでなくEvaluate
        Evaluate(ListBox1.LinkedCell).Offset(0, i + 1).Value = ""
        
        ' リストボックスの要素が選択されているかの判定
        If ListBox1.Selected(i) = True Then
            ' カンマ区切りで選択値を保存
            結果 = 結果 & ListBox1.List(i) & ","
            ' リンクセル(分割)に書き込み
            Evaluate(ListBox1.LinkedCell).Offset(0, j).Value = ListBox1.List(i)
            j = j + 1
        End If
    Next i
    
    'リンクセル(結合)に書き込み
    Evaluate(ListBox1.LinkedCell).Value = 結果
End Sub

関連記事

入力規則によるプルダウン(ドロップダウン)リストの記事一覧

マクロ・VBA 自動化講座の導入部分

フォローする