Excel VBAのコード紹介 「行を追加するVBA」

VBA

VB子

こんにちは。VB子です。

この動画で使われているVBAのコードをご紹介します。

これです。

Sub insertRows()
    For i = 825 To 3 Step -1
        For x = 1 To Cells(i, 6).Value - 1
            Rows(i + 1).Insert
        Next x
    Next i
End Sub

ほんと、これだけなんです。簡単です。

ただ、注意点が2点あるので、それだけご説明します。

注意点① 対象シートは指定しよう

動画では簡潔に書いてますが、
この書き方は誤作動することがあります。

ちゃんと書くとこんな感じです。

Sub ProperInsertRows()
    Dim WB As Workbook
    Set WB = ThisWorkbook
    Dim WS As Worksheet
    Set WS = WB.Worksheets("対象のシート名")

    For i = 825 To 3 Step -1
        For x = 1 To WS.Cells(i, 6).Value - 1
            WS.Rows(i + 1).Insert
        Next x
    Next i
End Sub

最初の4行を追加しました。
CellsやRows関数も対象シートに対して実行するように明示しています。
(WS.を文の最初につけています。)
これにより、VBAを実行するシートが指定できます。

対象シートを指定しないとどうなるか?

最初のVBAは、VBAを実行するシートを指定していないです。
そのため、最後に開いたシートに対して処理を実行する事になります。
そうすると、最後に開いたシートが処理してほしくないシートだったとき、最悪です。
VBAはアンドゥ(Ctrl + Z)で元に戻せないので、尚更です。
なので、ちゃんとシートを指定するのをお勧めします。

上級者編:数値は全部変数にする

恐らく上級者の方は、
も~~~とちゃんと書いて、
For文の数字の所も変数にすると思います。こんな感じ。

Sub MoreProperInsertRows()
    Dim WB As Workbook
    Set WB = ThisWorkbook
    Dim WS As Worksheet
    Set WS = WB.Worksheets("対象のシート名")

    Dim i, lastRowNum, firstRowNum, targetColumnNum As Long

    lastRowNum = 825    '表の最終行
    firstRowNum = 3     '表の最初の行
    targetColumnNum = 6 '追加する行の判断になる値が記載されている列番号


    For i = lastRowNum To firstRowNum Step -1
        For x = 1 To WS.Cells(i, targetColumnNum).Value - 1
            WS.Rows(i + 1).Insert
        Next x
    Next i
End Sub

全て変数にする理由は、修正するとき、便利だからです。
長いコード書いたり、複数人で開発したりすると、実感すると思います。

注意点② 行を追加する処理は下から実行する

最後の注意点は、下から処理を実行する。ということです。

For文の stepが -1になっていますが、ここがポイントです。
理由は、「行を追加すると、行番号がずれちゃうから」です。

なので、行番号がずれても大丈夫なように、処理を下から実行しています!

VB子

最後までお読みいただきありがとうございました。
質問などあれば、TikTokのコメント欄やQ&Aなどでご質問ください。

Youtubeでは、もう少しゆっくりした動画で解説していますので、よろしければ見てみてください。

動画1つしかあげてないのに、81人登録していただき、感謝しかありません