私が学んだように ここ (また SOで引用 )次のコードを使用して、Table1
の列3のデータ本体を選択できます。
ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select
複数の列を一緒に選択するための助けが必要です-列3から5、または列XからX + 3と言います。
this 質問への回答を使用する実際の列名を使用して途中まで進むように管理しました。
Range("Table1[[Column3]:[Column5]]").Select
しかし、名前の代わりに列番号を使用できるようにする必要があります。それらは関数の結果になるためです(つまり、列XからX + d)。
隣接する範囲の場合は、単一の列のサイズを変更するだけです。
ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Resize(, 3).Select
より複雑な選択の場合は、.Selectプロセスの前にUnionを使用してそれらを収集します。
With ActiveSheet.ListObjects("Table1")
Union(.ListColumns(3).DataBodyRange, _
.ListColumns(4).DataBodyRange, _
.ListColumns(5).DataBodyRange).Select
End With
より良い方法については、 Excel VBAマクロでの選択の使用を回避する方法 を参照してください。
_"A:B"
_などの相対テーブル範囲を取得できるDataBodyRangeでColumnsメソッドを使用します
したがって、最初の2つの列が必要な場合は、次のように記述できます。ActiveSheet.ListObjects("Table1").DataBodyRange.Columns("A:B").Select
しかし、相対列番号に基づいて選択したい場合はどうでしょうか。数値をこの文字列に変換する関数をいくつか作成します。
_Sub selectMultipe()
ActiveSheet.ListObjects("Table1").DataBodyRange.Columns(getRangeStr(1, 2)).Select
End Sub
'Get Range String
Function getRangeStr(startColNum As Long, endColNum As Long) As String
startCol = ColLtr(startColNum)
endCol = ColLtr(endColNum)
getRangeStr = startCol + ":" + endCol
End Function
'Convert column number to letter
Function ColLtr(iCol As Long) As String
If iCol > 0 And iCol <= Columns.Count Then ColLtr = Replace(Cells(1, iCol).Address(0, 0), 1, "")
End Function
_
注:文字関数への列番号が見つかりました ここ