web-dev-qa-db-ja.com

Excelテーブルの列数を選択するためのVBA

私が学んだように ここ (また SOで引用 )次のコードを使用して、Table1の列3のデータ本体を選択できます。

ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select

複数の列を一緒に選択するための助けが必要です-列3から5、または列XからX + 3と言います。

this 質問への回答を使用する実際の列名を使用して途中まで進むように管理しました。

Range("Table1[[Column3]:[Column5]]").Select

しかし、名前の代わりに列番号を使用できるようにする必要があります。それらは関数の結果になるためです(つまり、列XからX + d)。

8
eli-k

隣接する範囲の場合は、単一の列のサイズを変更するだけです。

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マクロでの選択の使用を回避する方法 を参照してください。

13
user4039065

_"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
_

注:文字関数への列番号が見つかりました ここ

2
jspek