【VBA】列ごとの処理をループで簡潔に!複数列への数式コピーを短く書く方法

Excel VBAで同じような処理が続くと、コードが非常に長くなり、管理や修正が大変になることがあります。
今回は、「複数の列に同じ処理(数式コピー)を行うコード」をループで簡潔に書き直す方法をご紹介いたします。


目次

実現したいこと

  • 複数の列(AH列~BQ列)に対して、2行目の数式を最終行までコピーしたい
  • 長くなってしまったコードをループ構文で短くシンプルにしたい

Before:1列ずつ処理していた冗長なコード

最初に書いていたコードは、各列ごとに1つずつ書いていたため非常に長くなっていました

' 一部抜粋(実際は36列分)
ws.Range("AH2").Copy Destination:=ws.Range("AH3:AH" & lastRow)
ws.Range("AI2").Copy Destination:=ws.Range("AI3:AI" & lastRow)
ws.Range("AJ2").Copy Destination:=ws.Range("AJ3:AJ" & lastRow)
' 以下省略

この方法でも処理は実行されますが、列が多くなるほどメンテナンス性が悪化します。


After:Forループで簡潔に書き直したコード

以下のように、列番号を使ってループ処理を行うことで、コードが劇的に短く・わかりやすくなります。

Sub CopyFormulasDown()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim col As Long

    ' ワークシートを指定
    Set ws = ThisWorkbook.Sheets(1)

    ' 列Aの最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' AH列(列番号34)〜BQ列(列番号69)までをループで処理
    If lastRow > 2 Then
        For col = 34 To 69
            ws.Cells(2, col).Copy Destination:=ws.Range(ws.Cells(3, col), ws.Cells(lastRow, col))
        Next col
    End If
End Sub

ポイント解説

  • ws.Cells(2, col):2行目のセル(数式元)
  • Destination:=...:コピー先は3行目~最終行まで
  • 34〜69:Excelの列番号で、AH列 = 34, BQ列 = 69

補足:列番号を調べる方法

列番号は以下の方法で確認できます。

  • A = 1, B = 2, ..., Z = 26
  • AA = 27, AB = 28, ..., AH = 34, BQ = 69

不明な場合は、以下のようなコードで確認も可能です。

MsgBox Columns("AH").Column  ' → 34 と表示される

まとめ

VBAでの処理は、繰り返しの多い構文をループで置き換えることで、コードの可読性・保守性が大きく向上します。

  • 同じ処理が並ぶときは列番号を使ったForループが効果的
  • Excelでは**列名ではなく列番号(1〜16384)**を使うことで、動的に処理が可能
  • コードの整理にもなり、ミスを減らすことができます

作業効率を高めるだけでなく、将来的な変更にも強いコードになりますので、ぜひご活用ください。

技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。

気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。

[Kindle Unlimited 読み放題プランをチェックする]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次