Excel VBA 行の選択、取得、追加(挿入)、削除

ExcelVBA-基礎編

VBAでシートの行の選択、取得、追加、削除について、ご説明します。

行の操作には「Rows」プロパティ、もしくは「Range」プロパティを使用します。

それぞれの操作にいくつか方法がありますので、一つ一つご説明します。

また、複数行の挿入やループや分岐と合わせて使用するサンプルも、併せてご説明します。

列の操作は「Excel VBA 列の選択、取得、追加(挿入)、削除」をご覧ください。

1.行の選択、取得、追加(挿入)、削除

行の操作は「Rows」プロパティか、「Range」プロパティです。

行の選択

行を選択するにはRows(行番号)で選択するか、Rangeを使用する場合は「Range.EntireRow」で指定します。

また、SelectとActivateどちらでも同じ動作となります。

Activate
Sub Sample1()

Rows(2).Activate

End Sub
Sub Sample2()

Range("A4").EntireRow.Activate

End Sub
Select
Sub Sample3()

Rows(1).Select

End Sub
Sub Sample4()

Range("A3").EntireRow.Select

End Sub

行の取得

行の取得も同様に、Rows(行番号)Range.EntireRowで指定します。

Rows
Sub Sample5()

Dim myRow As Range

Set myRow = Rows(1)
myRow.Select

End Sub
Range.EntireRow
Sub Sample6()

Dim myRow As Range

Set myRow = Range("A3").EntireRow
myRow.Select

End Sub

また、アクティブなセルと選択されているセルを取得する場合は次のコードになります。

ActiveCell
Sub Sample7()

Dim myRow As Range

Set myRow = ActiveCell.EntireRow
myRow.Select

End Sub
Selection
Sub Sample8()

Dim myRow As Range

Set myRow = Selection.EntireRow
myRow.Select

End Sub

行の追加(挿入)

行の追加は「Insert」メソッドを使用します。

Rows、Range.EntireRowどちらでも追加個所を指定できます。

Rows
Sub Sample9()

Rows(5).Insert

End Sub
Range.EntireRow
Sub Sample10()

Range("A3").EntireRow.Insert

End Sub

行の削除

行を削除する場合は「Delete」メソッドを使用します。

Rows、Range.EntireRowどちらでも削除個所を指定できます。

追加と違い、注意点としてループで複数回削除するような場合には、ループは必ず後ろから前へStep-1で削除します。

前から順に削除するとエラーとなります。

Rows
Sub Sample11()

Rows(5).Delete

End Sub
Range.EntireRow

Sub Sample12()

Range("A3").EntireRow.Delete

End Sub

2.複数行の追加(挿入)/削除

複数行の場合、Rows(“1:5”)の様に指定します。

単一行の場合「””」で囲いませんが、複数行の場合は囲います。

Rangeの場合はRange(“A1:A5”).EntireRowの様に指定します。

Rows
Sub Sample13()

Rows("5:10").Insert

End Sub
Sub Sample14()

Rows("5:10").Delete

End Sub
Range.EntireRow
Sub Sample15()

Range("A3:A10").EntireRow.Insert

End Sub
Sub Sample16()

Range("A3:A10").EntireRow.Delete

End Sub

3.ループと分岐で取得

A列に10個の商品名のデータがあります。

条件に指定した行を取得して、メッセージに表示します。

ここでは別の変数を用意していますが、変数「i」をそのまま使用してもかまいません。

Sub Sample17()

Dim i       As Long
Dim GetRow  As Long

For i = 2 To 11

    If Cells(i, 1) = "商品100005" Then

        GetRow = i
        Exit For

    End If

Next i

MsgBox "指定された行は" & GetRow & "です。"

End Sub

MsgBoxではなく、削除する場合は次のコードになります。

削除する場合は、後ろからStep-1で前に向かってループさせます。

今回は1回の処理でループを抜けているので、ループ順はどちらでも良いのですが、複数回削除を繰り返す場合は、後ろからループしないとエラーになります。

Sub Sample18()

Dim i       As Long

For i = 11 To 2 Step -1

    If Cells(i, 1) = "商品100005" Then

        Rows(i).Delete
        Exit For
    End If

Next i

End Sub

タイトルとURLをコピーしました