Excel VBA 逆引き集 | マルチ選択

Excel VBA
スポンサーリンク

外部連携 × マルチ選択の基本

業務でよくあるのが「複数ファイルを選んで一括処理したい」「外部システムや外部ファイルと連携したい」というケースです。
ここでは初心者向けに、外部連携(ファイルやAPIなど)とマルチ選択を組み合わせる方法 をコード例とテンプレートでかみ砕いて説明します。


基本の考え方

  • 外部連携とは?
    Excel VBAから外部のファイル(CSV, TSV, XML, JSONなど)やWeb APIを扱うこと。
  • マルチ選択とは?
    ユーザーが複数の対象(ファイルや項目)をまとめて選べる仕組み。
  • 組み合わせると?
    • 複数ファイルを一度に選んで読み込む
    • 複数データをまとめて外部APIに送信する
    • 選択した複数フォルダやファイルを一括処理

テンプレ1:複数CSVファイルを選んで一括取り込み

Sub ImportMultiCSV()
    Dim filePaths As Variant
    Dim i As Long
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rowCount As Long
    
    ' 複数ファイル選択ダイアログ
    filePaths = Application.GetOpenFilename( _
        FileFilter:="CSVファイル (*.csv), *.csv", _
        Title:="複数CSVを選択してください", _
        MultiSelect:=True)
    
    If IsArray(filePaths) = False Then Exit Sub
    
    ws.Cells.Clear
    rowCount = 1
    
    ' 選択したファイルを順番に読み込む
    For i = LBound(filePaths) To UBound(filePaths)
        Open filePaths(i) For Input As #1
        Dim lineData As String, arr As Variant
        Do Until EOF(1)
            Line Input #1, lineData
            arr = Split(lineData, ",")
            ws.Cells(rowCount, 1).Resize(1, UBound(arr) + 1).Value = arr
            rowCount = rowCount + 1
        Loop
        Close #1
    Next i
    
    MsgBox "複数CSVを一括で取り込みました!"
End Sub
VB
  • ポイント:
    • MultiSelect:=True で複数ファイル選択。
    • 配列で返るので For i = LBound ... でループ処理。
    • 実務で「日次CSVをまとめて取り込む」などに便利。

テンプレ2:複数ファイルを選んで外部APIに送信(例)

Sub SendMultiFilesToAPI()
    Dim filePaths As Variant
    Dim i As Long
    Dim http As Object
    Dim url As String
    
    url = "https://example.com/api/upload"
    
    filePaths = Application.GetOpenFilename( _
        FileFilter:="テキストファイル (*.txt), *.txt", _
        Title:="複数ファイルを選択してください", _
        MultiSelect:=True)
    
    If IsArray(filePaths) = False Then Exit Sub
    
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    For i = LBound(filePaths) To UBound(filePaths)
        ' ファイル内容を読み込む
        Dim fso As Object, ts As Object, fileContent As String
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.OpenTextFile(filePaths(i), 1)
        fileContent = ts.ReadAll
        ts.Close
        
        ' APIにPOST送信
        http.Open "POST", url, False
        http.setRequestHeader "Content-Type", "text/plain"
        http.Send fileContent
        
        MsgBox "送信完了: " & filePaths(i) & vbCrLf & "レスポンス: " & http.responseText
    Next i
End Sub
VB
  • ポイント:
    • 選択した複数ファイルを順番に読み込み。
    • APIにPOSTで送信。
    • 実務で「複数ログファイルを外部システムにアップロード」などに応用可能。

テンプレ3:ListBoxで複数選択した項目を外部連携

UserFormに ListBox1 を配置し、MultiSelect プロパティを 1 - fmMultiSelectMulti に設定。

Private Sub CommandButton1_Click()
    Dim i As Long
    Dim http As Object
    Dim url As String
    
    url = "https://example.com/api/register"
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            ' 選択項目をAPIに送信
            http.Open "POST", url, False
            http.setRequestHeader "Content-Type", "application/json"
            http.Send "{""item"":""" & ListBox1.List(i) & """}"
            
            MsgBox "送信完了: " & ListBox1.List(i)
        End If
    Next i
End Sub
VB
  • ポイント:
    • ListBoxで複数選択された項目をループ処理。
    • 外部APIにまとめて送信。

例題で練習

'例1:複数CSVファイルを選んで一括取り込み
'例2:複数ファイルを選んで外部APIに送信
'例3:ListBoxで複数項目を選んで外部APIに連携
VB

初心者向けポイント

  • ファイル選択は配列で返るIsArray で判定してループ処理。
  • ListBoxはSelectedプロパティで判定 → Trueなら選択済み。
  • 外部連携は「ファイル読み込み」や「API送信」と組み合わせる → 実務で役立つ。
  • マルチ選択を活用すると一括処理が可能 → 効率化に直結。

👉 この「外部連携 × マルチ選択テンプレ」を覚えておけば、Excel VBAで 複数ファイルや複数項目をまとめて外部システムに連携する処理 を簡単に作成できます。

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