【Excelマクロ(VBa)】リストボックスの活用


 フォーム


ファイルを選択してテキストボックスに表示する方法を例示しましたが、ファイルを複数選択した場合、テキストボックスには表示しきれません。

この場合、テキストボックスの代わりに下記のようにリストボックスを活用します。(参考:コンボボックスの活用)




 フォルダの取得方法


フォームの作成方法は割愛し、下記のようにファイルを複数選択した場合・・・



下記のように、選択したファイルをリストボックスに表示します。



Dim i As Long

'フォルダ選択のダイアログを表示する
With Application.FileDialog(msoFileDialogFilePicker)
  '複数選択可
  .AllowMultiSelect = True

  'フィルター:ファイル種類
  With .Filters
    .Clear
    .Add "Microsoft Excel", "*.xls?"
    .Add "text", "*.txt"
    .Add "All File", "*.*"
  End With

  'OKを押した場合
  If .Show = True Then
    'リストボックスの情報クリア
    With lstFileName
      .Clear
    End With

    '選択したファイルをリストボックスに登録
    For i = 1 To .SelectedItems.Count
      lstFileName.AddItem .SelectedItems(i)
    Next i

    'リストボックスの先頭行を選択
    lstFileName.Selected(0) = True

  End If
End With



 リストの表示方法を変更する


下記のようにプロパティの【ListStyle】を「0 - fmListStylePlain」から「1 - fmListStyleOption」に変更します。


すると、下記のようにラジオボタン表示となります。(複数選択できないため)


下記のようにプロパティの【MultiSelect】を「0 - fmMultiSelectSingle」から「1 - fmMultiSelectMulti」に変更します。


すると、下記のようにラジオボタンからチェックボックスに変わります。





 選択した情報の取得方法


上記のように複数選択可能な場合、リストに表示されている件数分ループ処理を行い、それぞれチェックされたか判定をする必要があります。

Dim i As Long
Dim strData As String

'リストボックスに登録された件数分ループする
For i = 0 To lstFileName.ListCount - 1
  '対象データが選択されている場合
  If lstFileName.Selected(i) = True Then
    '表示対象として変数に取得する
    strData = strData & lstFileName.List(i) & vbCrLf
  End If
Next i

'メッセージボックスで選択データを表示
MsgBox strData

結果は下記のようにになります。



管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す