検索
連載

Excelリストボックスで複数選択データと個数を取得VBA/マクロ便利Tips(2/2 ページ)

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、選択されている値を取得するListプロパティやデータの個数を取得するListCountプロパティの使い方に加え、複数選択データを取得する方法を解説する。

Share
Tweet
LINE
Hatena
前のページへ |       

リストボックスで複数選択データを取得する

 最後に、リストボックスで複数選択データを取得する方法を紹介する。これまで登場したListプロパティとListCountプロパティを組み合わせて使うことになる。書式は下記の通りだ。

リストボックスで複数選択データを取得する書式

With {オブジェクト}

 For {反復変数}=0 to .ListCount-1

  If .Selected({反復変数})=True Then

   {格納変数}={格納変数} & .List({反復変数}) & vbCrLf

  End If

 Next

End With


 {オブジェクト}には、リストボックスブジェクトを指定する。リストボックス内の{格納変数}が選択されていた場合は、{格納変数}に改行を含めて、リストボックスより選択された値を格納していく。

 コードを実行するフォームを整えよう。今度は図1に「複数データ選択フォーム表示」というボタンを追加しておく(図6)。


図6 「複数データ選択フォーム表示」というボタンを追加

 次に、ユーザーフォーム「UserForm2」を作成し、Captionプロパティに、「複数データ選択フォーム」と指定しておく。

 ユーザーフォーム上にはラベルを1個と、リストボックスを1個配置しておく。ラベルの「オブジェクト名」には「氏名ラベル」、リストボックスの「オブジェクト名」には、「一覧リストボックス」としておく。ラベルのプロパティから、「BorderStyle」に「fmBorderStyleSingle」を選択して、枠線を表示しておく。「Caption」プロパティ内は空にしておく。

 リストボックスのプロパティから、「MultiSelect」に「fmMultiSelectMulti」を選択しておく。これで「一覧リストボックス」での複数選択が可能になる。

 コントロールを配置すると、図7のようになる。


図7 各コントロールを配置した

 続いて、コードを書いていこう。なお、ユーザーフォームがアクティブになったときの処理を記述するコードは前述の通り省略する。

 VBEのメニューから、[挿入]→[標準モジュール]を選択する。プロジェクト内にModule1が追加されるので、この中にリスト4のコードを記述する。ShowメソッドでUserForm2をモードレスで表示するだけだ。

Sub 複数選択フォームの表示()
  UserForm2.Show vbModeless
End Sub
リスト4 「複数データ選択フォーム」を表示するコード

 リスト4のコードは図6の「複数データ選択フォームを表示」ボタンと関連付けておく。

 次に、リストボックスの値が選択されたときの処理を記述する(リスト5)。一覧リストボックス_Changeイベント内に記述することになる。

Private Sub 一覧リストボックス_Change()
  Dim 氏名 As String
  氏名 = ""
  Dim i As Long
  With 一覧リストボックス
    For i = 0 To .ListCount - 1
      If .Selected(i) = True Then
        氏名 = 氏名 & .List(i) & vbCrLf
        Cells(i + 3, 2).Interior.ColorIndex = 3
      Else
        Cells(i + 3, 2).Interior.ColorIndex = 2
      End If
    Next
  End With
  氏名ラベル.Caption = 氏名
End Sub
リスト5 「一覧リストボックス」内から、複数の氏名が選択されたときの処理

 2行目で文字列型の変数「氏名」を宣言し、3行目で初期化しておく。4行目でLong型の変数「i」を宣言する。

 6〜13行目で、変数「i」を、「0」から「一覧リストボックス」内の個数から「-1」した分だけ反復処理を行う。「-1」しているのは、ListCountで取得される値は、「1」から始まるためだ。

 7〜10行目で、「一覧リストボックス」の値が選択されていた場合は、変数「氏名」に、順次選択されていく値を、改行を含めて格納していく。

 9行目の「Cells(i+3,2)」で、「i+3」行目の「2列目(B列)」の背景色を「3(赤)」に変化させる。

 「一覧リストボックス」の氏名の選択が解除された場合は、11行目のように氏名の背景色を「2(白)」に戻している。

 15行目では「氏名ラベル」に、「一覧リストボックス」から選択された「氏名」を表示している。

 図8は実行結果だ。「一覧リストボックス」から複数の氏名を選択した。Excelシートのデータの背景色も「赤」に変化する。再度クリックして、選択を解除すると背景色は「白」に戻る。


図8

「.Selected(i)」という書き方が肝

 今回は、3つのTipsを紹介したが、いかがだっただろうか。

 リストボックスで複数選択データ取得する方法では、「一覧リストボックス」の値が選択されているとき、つまり「.Selected(i)」という書き方が肝となる。ここさえ分かれば、後は選択された氏名を、変数に順次追加していけばよい。

 選択した氏名のExcelシートのデータの背景色を変更させるのも、「Cells(行番号,列番号)」の書式を理解していれば簡単だ。

 次回も引き続きリストボックスコントロールのTipsについて解説する予定だ。お楽しみに。

著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る