Excel VBA | Offset × Resize × ForEach の 黄金 100 パターン集

VBA
スポンサーリンク

抽出・フィルタ(Resize 応用テンプレ集)

ここでは Resize を応用して「条件抽出・フィルタリング」を行う基本パターンを整理します。
実務でよくある「条件一致行の抽出」「複数列の切り出し」「異常値マーキング」などをまとめました。


61. 条件一致行を別ブロックにまとめる

Dim r As Range, pasteRow As Long
pasteRow = 20
For Each r In Range("A2:A100")
    If r.Value = "OK" Then
        r.EntireRow.Copy Destination:=Cells(pasteRow, 1)
        pasteRow = pasteRow + 1
    End If
Next r
VB

👉 「OK」の行だけを下段(20行目以降)へまとめてコピー。


62. 条件一致列だけを抽出

Dim col As Range, pasteCol As Long
pasteCol = 10
For Each col In Range("A:D").Columns
    If col.Cells(1, 1).Value = "対象" Then
        col.Copy Destination:=Cells(1, pasteCol)
        pasteCol = pasteCol + 1
    End If
Next col
VB

👉 ヘッダが「対象」の列だけを抽出して右側へコピー。


63. 3 列だけを切り出し Resize

Range("A1").Resize(100, 3).Copy Destination:=Range("F1")
VB

👉 A1 を基点に「100行 × 3列」を切り出して F列へコピー。


64. 範囲を Offset して別の位置へ

Range("B2:D20").Offset(0, 5).Value = Range("B2:D20").Value
VB

👉 B2:D20 の範囲を「右に5列ずらした位置」にコピー。


65. 複数列を同時に抽出

Range("A:C").Copy Destination:=Range("H1")
VB

👉 A〜C列をまとめて抽出して H列へコピー。


66. 範囲を縦横入れ替えて貼り付け

Range("A1:C10").Copy
Range("E1").PasteSpecial Paste:=xlPasteAll, Transpose:=True
VB

👉 A1:C10 の範囲を「転置」して E列へ貼り付け。


67. マッチ行だけ色付け

Dim r As Range
For Each r In Range("A2:A100")
    If r.Value = "NG" Then
        r.EntireRow.Interior.Color = vbRed
    End If
Next r
VB

👉 「NG」の行だけ赤色でマーキング。


68. 空白行だけまとめて抽出

Dim r As Range, pasteRow As Long
pasteRow = 50
For Each r In Range("B2:B100")
    If IsEmpty(r.Value) Then
        r.EntireRow.Copy Destination:=Cells(pasteRow, 1)
        pasteRow = pasteRow + 1
    End If
Next r
VB

👉 B列が空白の行だけを下段(50行目以降)へ抽出。


69. 異常値だけ抽出し右側へまとめ

Dim r As Range, pasteRow As Long
pasteRow = 2
For Each r In Range("C2:C100")
    If IsNumeric(r.Value) And r.Value < 0 Then
        Cells(pasteRow, 10).Value = r.Value
        pasteRow = pasteRow + 1
    End If
Next r
VB

👉 C列の「負の値」だけを右側(J列)へまとめる。


70. 一致しない行を別ブロックへ

Dim r As Range, pasteRow As Long
pasteRow = 30
For Each r In Range("D2:D100")
    If r.Value <> "PASS" Then
        r.EntireRow.Copy Destination:=Cells(pasteRow, 1)
        pasteRow = pasteRow + 1
    End If
Next r
VB

👉 「PASS」でない行だけを下段(30行目以降)へ抽出。


✅ まとめ

  • Resize → 範囲を切り出す・拡張する
  • Offset → コピー先をずらす
  • For Each → 条件ごとに抽出・フィルタリング

💡 この「抽出・フィルタ10パターン」をベースにすれば、実務で頻出する「条件一致行の抽出」「異常値検出」「転置コピー」などを自在に扱えます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました