Excel VBA 逆引き集 | 一括処理フォーム

Excel VBA
スポンサーリンク

一括処理フォームの基本

Excel VBAで「複数のデータをまとめて処理したい」「ボタンひとつで一括更新したい」といった場面では 一括処理フォーム を作ると便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • 一括処理フォームとは?
    UserFormにチェックボックスやリストを配置し、選択した複数項目をまとめて処理する仕組み。
  • 用途:
    • 複数行のデータを一括更新
    • 選択した顧客に一括でメール送信(例示)
    • 複数商品を一括で登録/削除
  • 流れ:
    1. UserFormに ListBox(対象一覧)CommandButton(処理ボタン) を配置。
    2. フォーム初期化時にシートのデータを一覧表示。
    3. ユーザーが複数選択。
    4. ボタンを押すと選択した項目を一括処理。

テンプレ1:シートのデータを一覧表示(ListBox)

UserFormに ListBox1 を配置。プロパティで MultiSelect = fmMultiSelectMulti に設定。

Private Sub UserForm_Initialize()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    Dim i As Long
    ListBox1.ColumnCount = 2
    
    For i = 2 To lastRow
        ListBox1.AddItem ws.Cells(i, 1).Value   ' ID
        ListBox1.List(ListBox1.ListCount - 1, 1) = ws.Cells(i, 2).Value   ' 名前
    Next i
End Sub
VB
  • ポイント:
    • シート「Data」のA列(ID)、B列(名前)を一覧化。
    • 複数選択可能にする。

テンプレ2:選択した項目を一括処理

UserFormに CommandButton1(処理ボタン) を配置。

Private Sub CommandButton1_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim i As Long
    
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            ' 選択された行の処理例:名前の横に「済」を記録
            Dim id As String
            id = ListBox1.List(i, 0)
            
            Dim rng As Range
            Set rng = ws.Range("A:A").Find(What:=id, LookAt:=xlWhole)
            
            If Not rng Is Nothing Then
                rng.Offset(0, 2).Value = "済"   ' C列に「済」を記録
            End If
        End If
    Next i
    
    MsgBox "選択された項目を一括処理しました!"
End Sub
VB
  • ポイント:
    • Selected(i) で選択状態を判定。
    • Find でシート上の該当行を探して処理。

テンプレ3:一括削除フォーム

Private Sub CommandButton1_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim i As Long
    
    For i = ListBox1.ListCount - 1 To 0 Step -1
        If ListBox1.Selected(i) Then
            Dim id As String
            id = ListBox1.List(i, 0)
            
            Dim rng As Range
            Set rng = ws.Range("A:A").Find(What:=id, LookAt:=xlWhole)
            
            If Not rng Is Nothing Then
                rng.EntireRow.Delete
            End If
        End If
    Next i
    
    MsgBox "選択された項目を削除しました!"
End Sub
VB
  • ポイント:
    • 削除は逆順ループで安全に処理。
    • 一括削除が可能。

テンプレ4:一括更新(例:ステータス変更)

Private Sub CommandButton1_Click()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim i As Long
    
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            Dim id As String
            id = ListBox1.List(i, 0)
            
            Dim rng As Range
            Set rng = ws.Range("A:A").Find(What:=id, LookAt:=xlWhole)
            
            If Not rng Is Nothing Then
                rng.Offset(0, 3).Value = "更新済"   ' D列にステータス更新
            End If
        End If
    Next i
    
    MsgBox "選択された項目のステータスを更新しました!"
End Sub
VB
  • ポイント:
    • 一括でステータスを変更。
    • 実務でよく使うパターン。

例題で練習

'例1:一覧表示 → UserForm_Initialize にコードを記述
'例2:選択項目を一括処理 → CommandButton1_Click にコードを記述
'例3:一括削除 → CommandButton1_Click にコードを記述
'例4:一括更新 → CommandButton1_Click にコードを記述
VB

初心者向けポイント

  • ListBoxのMultiSelectを有効化 → 複数選択が可能になる。
  • Selected(i)で判定 → 選択された項目だけ処理。
  • Findでシート上の行を特定 → IDやキーを基準に探す。
  • 一括処理はループで回す → 選択項目を順番に処理。
  • 削除は逆順ループ → 行削除時のズレを防ぐ。

👉 この「一括処理フォームテンプレ」を覚えておけば、Excel VBAで 複数データをまとめて処理できる便利なフォーム を簡単に作成できます。

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