【问题标题】:Reorganize data using an array使用数组重新组织数据
【发布时间】:2018-07-10 15:51:07
【问题描述】:

我有代码需要在数组或类似的东西中缩短,因为它需要很长时间才能运行。

我有一张复印纸和粘贴纸。

一个表被复制到复制表,宏读取每列的标题并将其粘贴到正确位置的粘贴表。所以它基本上将数据重新组织到它可以与其他表对齐。

我有 20 列被匹配、复制并粘贴到复制表中的粘贴表。

ABC = WorksheetFunction.Match("ABC", Rows("1:1"), 0)
DEF = WorksheetFunction.Match("DEF", Rows("1:1"), 0)... ETC.
Sheets("COPY").Columns(ABC).copy Destination:=Sheets("PASTE").Range("C1")
Sheets("COPY").Columns(DEF).copy Destination:=Sheets("PASTE").Range("C2")

【问题讨论】:

  • 请不要在此处发帖。
  • 不知道大写字母意味着大喊大叫,很高兴知道。

标签: arrays excel vba worksheet-function


【解决方案1】:

为列标题标签和目标使用变体数组。

dim h as long, hdrs as variant, hnum as variant

hdrs = array("ABC", "C1", "DEF", "C2")

with workSheets("COPY")

    for h=lbound(hdrs) to ubound(hdrs) step 2
        hnum = application.Match(hdrs(h), .Rows("1:1"), 0)
        if not iserror(hnum) then
            .Columns(hnum).copy Destination:=workSheets("PASTE").Range(hdrs(h+1))
        end if
    next h

end with

显然您不会覆盖之前的粘贴操作,但这会遵循您的原始示例代码。小心复制完整的列;您将无法粘贴到不是另一个完整列的任何目标(例如,作为目标的 C2 是一个完整列的单元格)。

如果目的地是连续的列,您可以将一个目的地偏移 h 列。

我通过将 application.match 返回到一个变体来对不匹配进行一些错误控制。

【讨论】:

  • 谢谢!我输入了数据,它工作得很好!不过,我确实有另一个问题,(因为我正在学习).. 由于我的数组每周都在变化,而不是必须在 vba 上重新输入,数组可以引用包含数据的工作表吗?对于这种情况,我有一张名为“Amend”的工作表,其中包含我在数组中输入的列表。它可以使用该范围/列来做同样的事情吗?我的清单在 A 列的“修改”表上。
  • 只需将工作表范围值读入数组,可能带有转置。如果您在尝试时遇到问题,这对新问题来说是个不错的话题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多