
Excel塾のエクセルマクロ講座入門編EX 01回
表に行を挿入したいということがよくあるかと思います。
あるいは不要な空白行を削除したいということも当然ありますよね。
今までに空白行を削除するマクロとか、表に1行おきに空白行を挿入するマクロとか、そういったものは既に紹介済みです。
今回は、今まで紹介したマクロでは解決できないケースです。
表以外の部分に影響を与えないで、空白行を入れるというのは、無理です。
EntireRowで1行インサートでは、他の部分にも、空白行が入ってしまいます。
解決策は、1行ごとに、セルを挿入していくということです。
今回は、書籍の一覧表に1行ごとに、隣の表とか 他の部分には影響を与えたくないという、空白セルを挿入したいわけです。

いつものように、行挿入のマクロを実行すると、当然、他の部分にも影響があります。
影響のあった表を修正するのは、大変な手間になりますね。

B列に1行おきに行を挿入するコードは以下になります。
Sub 空白行を1行おきに挿入する()
Dim LastRow As Long, i As Long
LastRow = Range("B1").End(xlDown).Row
For i = LastRow To 3 Step -1
Cells(i, "A").EntireRow.Insert
Cells(i, "A").EntireRow.ClearFormats
Next
End Sub
それでは不要な空白行をマクロで削除しましょう。このマクロはデータのない不要な空白行を削除して上に詰めていくマクロです。

隣の表の不要な空白行も削除します。

下記のマクロは、選択範囲の不要な空白行を削除して上に詰めるマクロのコードになります。
Sub 空白行を削除して上詰め()
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End Sub
では、こちらは選択した列の2行目の下から空白セルを挿入していくマクロを実行したところです。
列ごとに実行します。

Sub 選択範囲に空白セル挿入()
Dim trng As Range, col As Long, LastRow As Long, i As Long
Set trng = Selection
LastRow = trng(trng.Count).Row
col = trng.Column
For i = 3 To LastRow * 2 - 1 Step 2
Cells(i, col).Select
Selection.Insert Shift:=xlDown
Selection.Clear
Next i
End Sub
次に、1行ずつステップ実行して、コードを説明していきます。
汎用的に使うために、
実行したい列の範囲を選択しています。
Set trng = Selection で選択範囲をtrng という変数に入れました。
この
範囲のセルの個数は、trng.Count で取得できますが、
選択した範囲は列なので
最終行は、
trng(trng.Count).Rowで取得できることになります。
下図では、LastRow = 11が取得されています。

次にどの列に処理を実行したいのかということで、列番号を取得します。
列番号は、
col = trng.Columnで取得できます。
そしてFor...Next ステートメントを使って処理実行していきます。
For i = 3 To LastRow * 2 - 1 Step 2
セルを挿入するのは2行目の下、すなわち3行目からです。
そして LastRow * 2 - 1 してセルを追加しているので、その分増やしてやっています。

Selection.Insert Shift:=xlDown で、セルを挿入して下に移動しています。
この時、セルがコピーされているため、 Selection.Clear でクリアしています。

Next i でまたForに戻り、指定回数繰り返すという流れです。

このコードの場合は、1行目が見出し行ですので、データ開始行は2行目からになります。したがってセルの挿入は3行目から始まります。 予め範囲を選択してから実行するコードです。
