日々の業務でExcelを使っていると、「チェックを入れた行だけを別のシートにまとめたい」と感じることがあります。
たとえば、アンケート結果の中から「確認済み」のデータだけを抽出したり、TODOリストで「完了」にチェックを入れたタスクだけを別シートにコピーしたりするシーンです。
このような作業を毎回手作業でやっていると、チェックミスや転記ミスが起きやすくなります。そこで役立つのが、チェック付き行だけを自動で抽出するVBAマクロです。7
今回は、チェックボックスの代わりに「✓」や「○」などの記号、あるいは「TRUE/FALSE」などのフラグを使っているケースを想定し、具体的なマクロとその応用について紹介します。
チェック済みの行を抽出する基本マクロ
次のコードは、元データが「Sheet1」のA列からD列にあり、チェックフラグがE列に入っていると仮定しています。チェック内容は「○」とします。
Sub CopyCheckedRows()
Dim srcSh As Worksheet
Dim dstSh As Worksheet
Dim i As Long
Dim j As Long
Dim lastRow As Long
Set srcSh = Worksheets("Sheet1")
Set dstSh = Worksheets("Checked")
dstSh.Cells.ClearContents
lastRow = srcSh.Cells(Rows.Count, 1).End(xlUp).Row
j = 1
'2行目から最終行まで処理を行う
For i = 2 To lastRow
If srcSh.Cells(i, 5).Value = "○" Then
srcSh.Range(srcSh.Cells(i, 1), srcSh.Cells(i, 4)).Copy
dstSh.Cells(j, 1).PasteSpecial Paste:=xlPasteValues
j = j + 1
End If
Next i
'切り取り、コピーモードを元に戻す
Application.CutCopyMode = False
End Sub
このマクロのポイントは以下の通りです。
- 元シートは「Sheet1」、抽出先は「Checked」としています。
- E列(5列目)に「○」が入っている行だけを抽出。
- コピー範囲はA〜D列に固定。
PasteSpecial Paste:=xlPasteValuesにより、値だけを転記しています。
チェック列をTRUE/FALSEなどに変えたい場合は、条件文だけ書き換えればOKです。
If srcSh.Cells(i, 5).Value = True Then
チェックボックスを使っている場合の応用
フォームコントロールやActiveXのチェックボックスを使っている場合、セルではなくオブジェクトとして配置されているため、少し工夫が必要です。ただ、チェック状態の管理をセルで代用できれば、上記のようなコードで十分対応可能です。
たとえば、チェックボックスと連動するセル(リンクセル)をE列に設定しておけば、そこにTRUE/FALSEが反映されます。そのため、VBA側はセルの値を見るだけでOKになります。
If srcSh.Cells(i, 5).Value = True Then
このように、チェックボックスを直接操作せずに、セルを介して状態を管理することで、マクロの構造はシンプルになります。
実装するメリット
チェック付きデータを別シートに自動抽出することで、次のようなメリットがあります。
- 手作業でのフィルタやコピー作業が不要になる
- 転記ミスを防げる
- 定型処理としてボタン1つで再実行できる
- チェック付きデータを抽出→集計という流れがスムーズになる
とくに、チェックのルールをチームで統一しておけば、全員が同じマクロで作業効率を上げられるのも大きな利点です。
まとめ
チェックが付いた行だけを別シートに抽出する処理は、VBAを使えば簡単に自動化できます。チェック列に記号やTRUE/FALSEなどの簡単な目印を設け、繰り返し使える汎用マクロとして活用することで、作業時間を大幅に短縮できます。
- チェック列(E列など)を見て条件付きで抽出する
- フォームのチェックボックスは、リンクセルを介して判定するとシンプルにできる
- 値だけを貼り付けることで、書式に左右されない安定した処理が可能
- 抽出先シートの内容は毎回クリアしてから書き込むとミスを防げる
このようなマクロは、ToDoリストの管理、アンケートデータの集計、進捗管理表の抽出など、日常業務の中でさまざまに応用できます。シンプルな処理から少しずつVBAに慣れていきましょう。
