コピペでOK!事務作業が劇的に変わる「複数選択リスト」の作り方とコード解説

【業務効率化】VBA
スポンサーリンク

プルダウンリストから1つ選んではセルを移動し、また1つ選ぶ。この繰り返しで、気がつけば30分が経過。集中力が切れて、最後には間違ってしまっていた……。

こんな経験はありませんか?

もっと一気に選べたらいいのに!」その悩みを劇的に解決するのが、Excel VBAの「ListBox(リストボックス)の複数選択」機能です。

今回は、IT作業に苦手意識がある方でも、コピペで明日から実務に使える「リストボックス」の作成手順を分かりやすく解説します。

【業務効率化】VBAの記事を見る 

リストボックスの仕組みは「お弁当の注文表」と同じ

複数選択のリストボックスは「お弁当の注文表」に例えると分かりやすいです。

  • リストボックス: おかずのメニュー表
  • 複数選択の設定: 「唐揚げと卵焼きと鮭、全部にチェックを入れていいですよ」というルール
  • VBAコード: 「チェックが入ったおかずだけを、お弁当箱(セル)に詰めてね」という指示

一見難しそうに見えるシステムですが、構造自体はこれほどシンプルな仕組みで成り立っています。

ステップ1:操作画面の作成(ユーザーフォーム)

まずは、Excelの「開発」タブから「Visual Basic」を開き、ユーザーフォームを挿入します。そこに「リストボックス」を配置してください。

ここが最も重要なポイントになります。配置したリストボックスのプロパティウィンドウを開き、「MultiSelect」という項目を「1 – fmMultiSelectMulti」に変更してください。

この設定を行うだけで、一覧から複数の項目を同時に選択できるようになります。

【補足】MultiSelectプロパティ設定の違い

設定値プロパティ名操作方法と特徴
1fmMultiSelectMultiクリックするだけで、個別にON/OFFを切り替えます。通常のチェックボックスのような挙動になります。
2fmMultiSelectExtendedShiftキーを押しながらクリックで「範囲選択」、Ctrlキーを押しながらクリックで「飛び飛びの選択」ができます。Windowsのエクスプローラーでファイルを選ぶときと同じ挙動になります。

ステップ2:プログラムの記述(コードの貼り付け)

続いて、画面で選択した項目をセルに書き出すためのプログラムを記述します。

ユーザーフォーム内に「コマンドボタン」を1つ作成し、フォームをダブルクリックして以下のコードをそのまま貼り付けてみてください。

Private Sub UserForm_Initialize()
    ' リストボックスをいったん綺麗にします
    ListBox1.Clear

    ' 複数選択を可能にする設定(念のためコードでも指定しています)
    ListBox1.MultiSelect = fmMultiSelectMulti

    ' サンプルデータを10個追加します
    With ListBox1
        .AddItem "東京本社"
        .AddItem "大阪支社"
        .AddItem "名古屋営業所"
        .AddItem "福岡支店"
        .AddItem "札幌出張所"
        .AddItem "仙台オフィス"
        .AddItem "広島営業所"
        .AddItem "横浜ラボ"
        .AddItem "京都開発センター"
        .AddItem "沖縄サテライト"
    End With

End Sub

' --- コマンドボタンをクリックしたときの処理(最終行の下へ追記します) ---
Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim i As Long
    Dim r As Long

    ' A列の最終行を求め、その次の行(追記開始行)を設定します
    r = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    If ws.Cells(r, 1).Value <> "" Then
        r = r + 1
    End If

    Dim hasSelection As Boolean
    hasSelection = False

    ' リストボックスの全項目をループで確認します
    For i = 0 To ListBox1.ListCount - 1
        ' 項目が選択されているか判定します
        If ListBox1.Selected(i) Then
            ws.Cells(r, 1).Value = ListBox1.List(i)
            r = r + 1
            hasSelection = True
        End If
    Next i

    ' 選択状態に応じたメッセージ通知です
    If Not hasSelection Then
        MsgBox "項目が選択されていません。", vbExclamation
    Else
        MsgBox "追記が完了しました。", vbInformation
    End If

End Sub


(「コマンドボタン」の表示を「OK」に変更しています)

複数選択リストを上手に運用するための注意点

複数選択リストは非常に強力なツールですが、運用の際には少しだけ注意が必要です。

選択項目を多くしすぎると画面が文字で埋め尽くされて、どれを選んだか分からなくなり、逆に作業が遅くなる要因になります。

「便利さ」は「使いやすさ」とセットです。項目が多いときは、事前に絞り込み機能をつけたり、リストを整理したりすることが大切です。

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました