🎋

Excel VBA_1行おきに空白行を挿入/削除

2022/12/23に公開

この記事ではVBAで1行おきに空白行を挿入します。下記のような商品と金額が10個並んだ表に対して、1行おきに空白行を挿入していきます。

実行後は下記のような形になります。

空白行を挿入

マクロのコードはこちらです。空白行を挿入するのはその場限りの作業と仮定して、まずは実行できるベタ書きのコードで作成しました。

Dim i As Long
For i = 4 To 20 Step 2
    Rows(i).Insert
Next

ポイントとしては下記の通りです。

  • 4行目以降で走査を実行するのでi = 3
  • 1行置きに空行を挿入するのでStep 2
  • 扱っている行の長さは10行なので、およそ2倍のTo 20と設定

同じことを逆側から行うと次のようになります。

Dim i As Long
For i = 20 To 4 Step -1
    Rows(i).Insert
Next

行を挿入した場合、行が追加されてどんどんズレてしまう危険性があります。そのため下からFor文で遡っていって行を追加するのがセオリーとなっています(Step 2のような面倒なことをしなくても済みます。)

1行おきに追加した行を削除

先ほどの1行おきに追加した行を元に戻したい場合は下記のコードを実行します。

Dim i As Long
For i = 36 To 4 Step -2
    Rows(i).Delete
Next

36行目からスタートして、2行おきに行を削除している点に注目して下さい。

空白行の削除

同じ仕組みで空白行を削除することもできます。

Dim i As Long
For i = 21 To 2 Step -1
    If Range("B" & i).Value = "" Then
        Range("B" & i).EntireRow.Delete
    End If
Next
  • 21行目に最後の項目があったので21からスタート
  • 1番上の1行は残したいのでTo 2
  • 上からではなく下から削除しないとセルがズレるので-1

SpecialCellsによる削除

ちなみにSpecialCellsメソッドを使っても削除が簡単にできます。

Range("B2:B20").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

こちらなら一発で処理が完了するので、SpecialCellsメソッドは積極的に使っていくと良いかもしれません。

Discussion