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
据我所知here (also 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