【问题标题】:Is there a way by which I can select particular columns from an excel sheet based on the column number?有没有一种方法可以根据列号从 Excel 表中选择特定列?
【发布时间】:2017-01-25 20:18:55
【问题描述】:

我有一个包含数千列的excel表,我想从中选择一些,每个都有一个列号,有没有办法可以选择满足特定条件的列?例如,编号为 50、70、120、154、200 的列。如何从 2000 列的 excel 文件中选择它们?有没有宏可以做到这一点? 谢谢

【问题讨论】:

  • 您可能想澄清您的问题。你的意思是你想要第 50、70、120 等列?还是包含 50、70、120 等的列?另外,您想选择它们还是对它们做些什么?到目前为止,您是否尝试过任何 VBA?
  • 谢谢@CLR。是的,我的意思是第 50、70、120 个。我只需要选择它们。对于 VBA,我使用了这个宏 Sub Macro() Range("a1,b1,d1,e1,g1,h1").EntireColumn.Select End Sub 但这仅在列的标题是字母时才有效。

标签: excel vba


【解决方案1】:

采用@Wujaskun 的答案并以此为基础 - 您可以执行以下操作,这将允许您在一行中指定列号并消除重复编码的需要:

Sub select_columns()

Dim myColumns As Range

myColumnNumbers = Array(1, 5, 9, 13, 17) '.. and on and on..

ReDim myColumn(UBound(myColumnNumbers)) As Range

For Each c In myColumnNumbers

    If myColumns Is Nothing Then
        Set myColumns = Columns(c).EntireColumn
    Else
        Set myColumns = Union(myColumns, Columns(c).EntireColumn)
    End If

Next

myColumns.Select

Set myColumns = Nothing

End Sub

一个轻微的警告,不要重复列号(或至少第一个),因为这会导致联合重置。

编辑 - 我现在改进了代码以允许(或至少不会导致问题)如果重复第一列号。

【讨论】:

    【解决方案2】:

    您可以使用union 选择多个列。我创建了一个简短的宏,只是为了让您了解它是如何工作的。

    Sub select_columns()
    
    Dim myColumns, myColumn(1 To 5) As Range
    
    Set myColumn(1) = Columns(1).EntireColumn
    Set myColumn(2) = Columns(3).EntireColumn
    Set myColumn(3) = Columns(5).EntireColumn
    Set myColumn(4) = Columns(7).EntireColumn
    Set myColumn(5) = Columns(9).EntireColumn
    
    Set myColumns = Union(myColumn(1), myColumn(2), myColumn(3), myColumn(4), myColumn(5))
    
    myColumns.Select
    
    End Sub
    

    【讨论】:

    • 感谢@Wujaszkun。如果我想选择少量列,这很好,但如果我想选择 50 列,代码会很长。
    • @Data Miner - 这只是一个示例代码,在最终版本中,您可能希望使其更加灵活并使用某种循环将列添加到 Union,例如CLR 在他的回答中做到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2023-03-11
    • 2011-12-22
    相关资源
    最近更新 更多