VBA用于在Excel表格中select多个列

正如我在这里学到的( 在SO中也有引用 ),可以使用下面的代码来selectTable1 3列的数据体:

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

我需要帮助来一起select多个列 – 例如列3到5,或列X到X + 3。

使用这个问题的答案,我使用实际的列名进行中途处理:

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

但我需要能够使用列号而不是名称,因为它们将是一个函数的结果(即列X到X + D)。

对于连续范围,只需调整单个列的大小。

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

对于更复杂的select,请使用Union在.Select过程之前收集它们。

 With ActiveSheet.ListObjects("Table1") Union(.ListColumns(3).DataBodyRange, _ .ListColumns(4).DataBodyRange, _ .ListColumns(5).DataBodyRange).Select End With 

请参阅如何避免在Excel VBAmacros中使用select以获得更好的方法。

在DataBodyRange上使用Columns方法,它可以使用相对的表格范围,如"A:B"

所以,如果你想要写前两列: ActiveSheet.ListObjects("Table1").DataBodyRange.Columns("A:B").Select

但是如果你想根据相对的列号来select呢? 创build几个函数将数字转换为此string:

 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 

注意:在这里find了字母函数的列号