今回はシートの列の選択、取得、追加、削除について、ご説明します。
列の操作には「Columns」プロパティ、もしくは「Range」プロパティを使用します。
それぞれいくつか方法がありますので、一つ一つご説明します。
また、複数列の挿入やループや分岐と合わせて使用するサンプルも、併せてご説明します。
行の操作は「Excel VBA 行の選択、取得、追加(挿入)、削除」をご覧ください。
1.列の選択、取得、追加(挿入)、削除
列の操作は「Columns」プロパティか、「Range」プロパティです。
列の選択
列を選択するにはColumns(列番号)で選択するか、Rangeを使用する場合は「Range.EntireColumn」で指定します。
また、SelectとActivateどちらでも同じ動作となります。
Activate
Sub Sample1()
Columns(2).Activate
End Sub
Sub Sample2()
Range("B1").EntireColumn.Activate
End Sub
Select
Sub Sample3()
Columns(1).Select
End Sub
Sub Sample4()
Range("A1").EntireColumn.Select
End Sub
列の取得
列の取得も同様に、Columns(列番号)、Range.EntireColumnで指定します。
Columns
Sub Sample5()
Dim myRow As Range
Set myRow = Columns(1)
myRow.Select
End Sub
Range.EntireColumn
Sub Sample6()
Dim myRow As Range
Set myRow = Range("A1").EntireColumn
myRow.Select
End Sub
また、アクティブなセルと選択されているセルの列を取得する場合は次のコードになります。
ActiveCell
Sub Sample7()
Dim myRow As Range
Set myRow = ActiveCell.EntireColumn
myRow.Select
End Sub
Selection
Sub Sample8()
Dim myRow As Range
Set myRow = Selection.EntireColumn
myRow.Select
End Sub
列の追加(挿入)
列の追加は「Insert」メソッドを使用します。
Columns、Range.EntireColumnどちらでも追加個所を指定できます。
Columns
Sub Sample9()
Columns(5).Insert
End Sub
Range.EntireColumn
Sub Sample10()
Range("C1").EntireColumn.Insert
End Sub
列の削除
列を削除する場合は「Delete」メソッドを使用します。
Columns、Range.EntireColumnどちらでも削除個所を指定できます。
追加と違い、注意点としてループで複数回削除するような場合には、ループは必ず右から左へStep-1で削除します。
左から順に削除するとエラーとなります。
Columns
Sub Sample11()
Columns(5).Delete
End Sub
Range.EntireColumn
Sub Sample12()
Range("A1").EntireColumn.Delete
End Sub
2.複数列の追加(挿入)/削除
複数列の場合、Columns(“1:5”)の様に指定できません。
Rangeのみ指定できて、Range(“A1:C1”).EntireColumnの様に指定します。
追加
Sub Sample13()
Range("A1:C1").EntireColumn.Insert
End Sub
削除
Sub Sample14()
Range("A1:C1").EntireColumn.Delete
End Sub
3.ループと分岐で取得
1行目に7個のデータがあります。
条件に指定した列を取得して、メッセージに表示します。
ここでは別の変数を用意していますが、変数「i」をそのまま使用してもかまいません。
Sub Sample15()
Dim i As Long
Dim GetCol As Long
For i = 1 To 7
If Cells(1, i) = "D列" Then
GetCol = i
Exit For
End If
Next i
MsgBox "指定された列番号は" & GetCol & "です。"
End Sub
MsgBoxではなく、削除する場合は次のコードになります。
削除する場合は、右からStep-1で左に向かってループさせます。
今回は1回の処理でループを抜けているので、ループ順はどちらでも良いのですが、複数回削除を繰り返す場合は、右からループしないとエラーになります。
Sub Sample16()
Dim i As Long
For i = 7 To 1 Step -1
If Cells(1, i) = "E列" Then
Columns(i).Delete
Exit For
End If
Next i
End Sub