シートに空行を複数行追加するには
ここではシートに空行を複数行追加する方法について紹介します。
単純な空行の追加については「VBAでシートに空行を追加する」をご参照ください。
上のリンク先にも書いてありますが、シートに空行を追加するには、RangeオブジェクトのInsertメソッドを利用します。
複数行の追加の場合もそれは同じですが、Rangeオブジェクトの書き方が異なります。単一行か複数行かは、空行を追加する座標を示すRangeオブジェクトが1行か複数行のどちらを表しているかによって変わります。
また、シートに空行を追加する処理を書く場合、Rangeオブジェクトに複数行範囲を指定してまとめて空行を追加するのではなく、ループで空行を1行ずつ入れる方が都合がいい場合もあります。
そこで以下ではRangeオブジェクトで複数行を指定して空行を追加する方法と、ループ処理で空行を追加する方法の2つを紹介します。
1. Rangeオブジェクトで複数行を指定して空行を追加する方法
複数行を示すRangeオブジェクトの書き方にはRangeとRowsの2通りあります。
以下のコードは2行目から5行目(2,3,4,5行目の4行分)に空白を追加します。
1 2 3 |
Sub addMultiRowRange() Call Range("2:5").Insert End Sub |
1 2 3 |
Sub addMultiRowRow() Call Rows("2:5").Insert End Sub |
どちらを使っても結果は同じになります。
「Range(“2:5”)」も「Rows(“2:5”)」も、この書き方をしている時点で行範囲を指定していることになります。
そのため、RangeオブジェクトがRange(“A1”)などのように単一セルを指定しているときは、「Range(“A1”).EntireRow.Insert」と、単一セルを起点とした行全体を示す「EntireRow」プロパティを設定する必要がありますが、(“2:5”)のように2~5行目、と行全体であることが分かっている場合はEntireRowプロパティは不要になります。
なお、RangeとRowsはWorksheetsオブジェクトを親オブジェクトとして持つため、シートを指定する場合は以下のように書きます。
1 2 3 |
Sub addMultiRowRange2() Call Worksheets("Sheet1").Range("2:5").Insert End Sub |
1 2 3 |
Sub addMultiRowRow2() Call Worksheets("Sheet1").Rows("2:5").Insert End Sub |
2. ループで複数行の空行を追加する方法
以下は指定回数のループで空行を追加するコードです。上で紹介した「2~5行目に空行を追加する」コードと同じ動きになるように書いています。
コメントに大体書いてますが、やっているのは、基点となるセルを用意しておいて、あとはそこから指定回数だけ空行を1行ずつ追加する、という内容です。
Rangeオブジェクトを変数rに入れていますが、ここではA2セルを起点としており行全体を示しているわけではありません。そのため、空行を追加する箇所の処理では「Range.EntireRow.Insert」として、EntireRowプロパティを使って行全体を表すようにしています。
マクロ実行中に1行ずつ空行を追加することによるチラチラ防止のために「Application.ScreenUpdating = False/True」を入れてますが、空行追加には影響ないため、不要であれば削除してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub addMultiRowLoop() Dim i As Integer '// ループカウンタ Dim r As Range '// セル Application.ScreenUpdating = False '// 基点セルを指定 Set r = Range("A2") i = 0 Do '// ループカウンタが3を超えたらループ終了 If i > 3 Then Exit Do End If '// 空行追加 r.EntireRow.Insert '// ループカウンタ加算 i = i + 1 Loop Application.ScreenUpdating = True End Sub |