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