Excel VBA | Offset を実務でガンガン使うためのテンプレ集

VBA
スポンサーリンク

以下は「Offset を実務でガンガン使うためのテンプレ集」。
全部コピペで動くし、状況に合わせてそのままパーツとして組み込める。


1. 隣の列へ集計結果を書くテンプレ

B列〜D列の合計を右隣の E 列へ自動で書く
(最終行自動検出つき)

Sub Temp_Offset_SumRight()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row

    Dim r As Range
    For Each r In Range("B2:B" & lastRow)
        r.Offset(0, 3).Value = _
            WorksheetFunction.Sum(r, r.Offset(0, 1), r.Offset(0, 2))
        ' B + C + D → E
    Next r
End Sub
VB

● 汎用化ポイント

  • 「右へ3列」は (0,3)
  • 列数が変わっても、Offset なら柔軟に対応可能
  • 実務では合計だけでなく、差分や判定にも流用できる

2. 表の横方向へ項目を自動追加するテンプレ

A1 から右へ N 列、ヘッダ名を自動で並べる

Sub Temp_Offset_HeaderFill()
    Dim startCell As Range
    Set startCell = Range("A1")

    Dim headers As Variant
    headers = Array("ID", "名前", "数量", "単価", "金額")

    Dim i As Long
    For i = LBound(headers) To UBound(headers)
        startCell.Offset(0, i).Value = headers(i)
    Next i
End Sub
VB

● こんな場面で使う

  • 外部データを読み込んだシートにヘッダを自動生成
  • 日次/週次レポートのフォーマット作成

3. 表末尾に行を自動追加して値を入れるテンプレ

最終行の 1 行下に、新しい行を作ってデータを書く

Sub Temp_Offset_AddNewRow()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Dim r As Range
    Set r = Cells(lastRow, "A")

    r.Offset(1, 0).Value = "新規データ"
    r.Offset(1, 1).Value = Now          ' 日付など
    r.Offset(1, 2).Value = "担当:Halu"
End Sub
VB

● よくある用途

  • ログ記録
  • 実行履歴・ステータス書き込み
  • 自動レポートの1行追加

4. 「条件に合う行の右隣」へフラグを立てるテンプレ

B列が空欄の行にだけ「未入力」と右隣へ書く

Sub Temp_Offset_FlagMissing()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row

    Dim r As Range
    For Each r In Range("B2:B" & lastRow)
        If r.Value = "" Then
            r.Offset(0, 1).Value = "未入力"
        Else
            r.Offset(0, 1).Value = ""
        End If
    Next r
End Sub
VB

● 実務だと定番

  • 入力チェック
  • 欠損データのマーキング
  • 審査待ち/処理済などのフラグ付け

5. Offset × Resize で「範囲ブロック」を右へコピー

2×5 の範囲をそのまま右へ2列ずらして複製

Sub Temp_Offset_ResizeCopy()
    Dim block As Range
    Set block = Range("A1").Resize(2, 5) ' 2行×5列

    block.Copy Destination:=block.Offset(0, 2)
End Sub
VB

● 超便利ポイント

  • Offset で「位置」
  • Resize で「サイズ」
  • セットで使うと表操作が劇的に楽になる

6. 表の端まで連続処理(横へ広がる動的処理)

A1 を基準に、右にデータが続く限り自動処理

Sub Temp_Offset_AutoExpand()
    Dim c As Range
    Set c = Range("A1")

    Do While c.Value <> ""
        c.Offset(1, 0).Value = c.Value * 10
        Set c = c.Offset(0, 1) ' 右へ1列進む
    Loop
End Sub
VB

● 便利なシーン

  • 見出しが横に広い表
  • 月が追加されるレポート(1月→2月→3月…)
  • 右方向のデータ連鎖処理

7. Offset × Find で検索 → 隣へ書くテンプレ

指定文字が見つかった行の右隣へ値を入れる

Sub Temp_Offset_FindWrite()
    Dim f As Range
    Set f = Columns("A").Find("売上")

    If Not f Is Nothing Then
        f.Offset(0, 1).Value = "ヒット!"
    End If
End Sub
VB

● 実務で定番の“検索後処理”

  • 見出し名が変動する場合
  • 外部システムのデータ形式が毎回微妙に違う場合

8. Offset × ループで「行単位の複数列処理」をテンプレ化

B列〜E列を1行ずつ処理して、結果を右隣へ

Sub Temp_Offset_MultiColumnProcess()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row

    Dim r As Range
    For Each r In Range("B2:B" & lastRow)
        Dim total As Double
        total = r.Value + r.Offset(0, 1).Value + r.Offset(0, 2).Value + r.Offset(0, 3).Value
        r.Offset(0, 4).Value = total
    Next r
End Sub
VB

9. 新しい列を自動生成 → 値を入れるテンプレ

右端のさらに右に列を追加して”結果”列を作る

Sub Temp_Offset_AddColumn()
    Dim lastCol As Long
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column

    Dim baseCell As Range
    Set baseCell = Cells(1, lastCol)

    baseCell.Offset(0, 1).Value = "結果"         ' 見出し
    baseCell.Offset(1, 1).Resize(10, 1).Value = "OK"  ' 下の10行にOK
End Sub
VB

● 列追加も Offset が便利

  • 日付列が増える帳票
  • 新しい指標欄の追加
  • データ分析の補助列

10. Offset × 条件で“次の空行”を探して追記

空の行を探して、自動で値を追記する

Sub Temp_Offset_AppendToBlankRow()
    Dim r As Range
    Set r = Range("A2")

    Do While r.Value <> ""
        Set r = r.Offset(1, 0) ' 下へ移動
    Loop

    ' ここが最初の空行
    r.Value = "追加データ"
    r.Offset(0, 1).Value = Now
End Sub
VB

● 日報・ログ・取引履歴などによくあるパターン


まとめ

Offset は「相対的に動く」ってだけの単純な仕様なのに、
実務に落とすとこんなに多用途なパーツになる。

  • 隣列の計算
  • 行の追加
  • 列の拡張
  • 検索後の処理
  • データの広がりに自動追従
  • ブロックコピー
  • 欠損チェック
  • ループでの多列処理

だいたいこの辺を押さえておけば、日常の Excel 業務はほぼ無双できる。

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