一括処理フォームの基本
Excel VBAで「複数のデータをまとめて処理したい」「ボタンひとつで一括更新したい」といった場面では 一括処理フォーム を作ると便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 一括処理フォームとは?
UserFormにチェックボックスやリストを配置し、選択した複数項目をまとめて処理する仕組み。 - 用途:
- 複数行のデータを一括更新
- 選択した顧客に一括でメール送信(例示)
- 複数商品を一括で登録/削除
- 流れ:
- UserFormに ListBox(対象一覧) と CommandButton(処理ボタン) を配置。
- フォーム初期化時にシートのデータを一覧表示。
- ユーザーが複数選択。
- ボタンを押すと選択した項目を一括処理。
テンプレ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で 複数データをまとめて処理できる便利なフォーム を簡単に作成できます。
