VBA 用于在 excel table 中选择多个列

VBA for selecting a number of columns in an excel table

据我所知here (also ) 以下代码可用于 select Table1 中第 3 列的数据主体:

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

我需要帮助 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

有关更好的方法,请参阅 How to avoid using Select in Excel VBA macros

在 DataBodyRange 上使用 Columns 方法,它可以采用相对 table 范围,例如 "A:B"

因此,如果您想要前两列,您可以这样写:ActiveSheet.ListObjects("Table1").DataBodyRange.Columns("A:B").Select

但是如果您想 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

注意:已找到列号转字母函数here