【问题标题】:How to copy an entire column based on the cell value in the first row?如何根据第一行的单元格值复制整列?
【发布时间】:2021-07-07 14:25:40
【问题描述】:

我有一个用于某些计算的不同数字的代码表。我需要根据顶行中的第一个值选择整个列。我可以根据范围选择整个列,但是是否有一个 VBA 查找函数可以查找其中指定的值,并与定义的单元格范围中的值进行比较,并允许我们复制整个列?这是我到目前为止所做的:

Columns("F:F").Select
Selection.Copy
Columns("A:A").Select
Selection.Insert Shift:=xlToRight

假设我有一个名为“string1”的值,所以在我的例子中,“string1”在地址“F1”中,这就是我复制“F”列并将其粘贴到所有其他列前面的原因。同样,如果将值更改为地址“G1”处的“string2”,则需要将“G”列粘贴到工作表的前面。

【问题讨论】:

  • 使用Range.FindApplication.Match 在第一行查找有问题的字符串。使用Find,如果找到字符串,结果是Range,你可以调用.EntireColumn on。如果使用Match,如果找到字符串,则结果为列索引。
  • 太棒了!它奏效了。

标签: excel vba


【解决方案1】:

根据 BigBen 的建议,这就是我所做的工作。我希望它对 VBA 宏的所有新手有所帮助。

Dim c As Range
With Worksheets(1)
    Set c = .Range("A1:XFD1").Find("string1", LookIn:=xlValues)
    Range(c.Address).EntireColumn.Select
    Selection.Copy
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
End With

因为我只想搜索工作表的第一行,所以我使用了该范围,但可以根据需要将其更改为任何值。 Find 函数返回可用于所需选择的范围(变量 c),然后可以以我们想要的方式使用它。

编辑:(避免选择单元格)

Dim c As Range
Set c = Worksheets(1).Range("A1:XFD1").Find("string1", LookIn:=xlValues)
c.EntireColumn.Copy
Columns("A:A").Insert Shift:=xlToRight

【讨论】:

  • 要使其在任何版本的Excel 中工作,您应该将.Range("A1:XFD1") 替换为.Rows(1)Application.Match 可能更合适,因为您正在寻找一个(第一个)事件。对于这种情况,Find 方法还有一些参数,最值得注意的是省略了 LookAt 参数。如果c 最终什么都不是(“不匹配”),则会发生错误。使用类似If c Is Nothing Then Exit Sub 的东西。你忘记了.Range(c.Address) 中的点,无论如何都应该用c 替换。在编辑中,您应该限定Columns("A:A")(长为Columns("A")),即Worksheets(1).Columns...
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2013-12-11
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多