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

ExcelVBA-基礎編

今回はシートの列の選択、取得、追加、削除について、ご説明します。

列の操作には「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
タイトルとURLをコピーしました