【问题标题】:VBA for selecting a number of columns in an excel tableVBA 用于在 Excel 表中选择多列
【发布时间】:2018-01-03 12:07:12
【问题描述】:

据我所知here(也称为quoted in SO),以下代码可用于选择Table1 中第3 列的数据体:

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

我需要帮助才能一起选择多个列 - 比如第 3 到第 5 列,或第 X 到 X+3 列。

使用this问题的答案,我设法通过使用实际的列名来中途:

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

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

【问题讨论】:

  • Range(Cells([rowNum],[colNum]),Cells([rowNum],[colNum])?
  • 试试看:Range("Table1[[Column" & CStr(X) &"]:[Column" & CStr(X+d) & "]]").Select.
  • @BruceWayne 这会起作用,但我必须弄乱行号,因此不会使用表格功能(例如,选择表格列的能力)
  • @RafaelMatos 如果这些是实际的列名,您的建议将起作用。在其他情况下可能会出现这种情况,因为这些是默认名称,在我的情况下它们只是一个示例,实际名称不同

标签: excel excel-tables vba


【解决方案1】:

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

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 了解更好的方法。

【讨论】:

  • 调整大小...成功了!!
【解决方案2】:

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

所以如果你想要前两列,你可以写: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

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

【讨论】:

  • 通常,“列字母”是通过拆分 $ 符号上的绝对地址并获取数组的第二个元素来检索的,但这也可以。
  • 这对于我目前的需求来说有点复杂,但在其他情况下可能会有用 - 谢谢!
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多