Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA用于在excel表格中选择多个列_Excel_Excel Tables_Vba - Fatal编程技术网

VBA用于在excel表格中选择多个列

VBA用于在excel表格中选择多个列,excel,excel-tables,vba,Excel,Excel Tables,Vba,正如我所了解到的,以下代码可用于选择表1中第3列的数据体: ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select 我需要帮助一起选择多个列——比如第3列到第5列,或者第X列到第X+3列 使用问题的答案,我通过使用实际的列名,成功地做到了一半: Range("Table1[[Column3]:[Column5]]").Select 但是我需要能够使用列号而不是名称,因为它们将是函数的结果(即列X到X+d)。对

正如我所了解到的,以下代码可用于选择
表1
中第3列的数据体:

ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Select
我需要帮助一起选择多个列——比如第3列到第5列,或者第X列到第X+3列

使用问题的答案,我通过使用实际的列名,成功地做到了一半:

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

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

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

ActiveSheet.ListObjects("Table1").ListColumns(3).DataBodyRange.Resize(, 3).Select
对于更复杂的选择,请使用Union在.Select过程之前收集它们

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

有关更好的方法,请参阅。

在DataBodyRange上使用Columns方法,该方法可以采用相对表范围,例如
“a:B”

因此,如果需要前两列,可以编写:
ActiveSheet.ListObjects(“Table1”).DataBodyRange.columns(“A:B”)。选择

但是,如果您想根据相对列数进行选择,该怎么办? 创建几个函数以将数字转换为此字符串:

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
Sub-selectMultipe()
ActiveSheet.ListObjects(“Table1”).DataBodyRange.Columns(getRangeStr(1,2))。选择
端接头
'获取范围字符串
函数getRangeStr(startColNum为长,endColNum为长)为字符串
startCol=ColLtr(startColNum)
endCol=ColLtr(endColNum)
getRangeStr=startCol+“:”+endCol
端函数
'将列号转换为字母
函数ColLtr(iCol长度)作为字符串

如果iCol>0和iCol
Range(Cells([rowNum]、[colNum])、Cells([rowNum]、[colNum])
?尝试:
Range(“表1[[Column]&CStr(X)和]:[Column”&CStr(X+d)和“]])。选择
@BruceWayne这会起作用,但我必须处理行号,因此不会使用表功能(例如,选择表列)@RafaelMatos如果这些是实际的列名,你的建议就行了。在其他情况下可能会这样,因为这些是默认名称,在我的情况下,它们只是一个示例,实际名称不同。通常,通过拆分$symbol上的绝对地址并获取数组的第二个元素来检索“列字母”,但是这对我目前的需求来说有点复杂,但在其他情况下可能会有用-谢谢!调整大小…搞定了!!