使用数组重组数据

时间:2018-07-10 15:51:08

标签: arrays excel vba worksheet-function

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

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

将表复制到复印纸上,并且宏读取每一列的标题并将其粘贴到粘贴纸上的正确位置。因此,它基本上可以重组数据,使其可以与其他表对齐。

我有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")

1 个答案:

答案 0 :(得分:0)

对列标题标签和目标位置使用变体数组。

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返回一个变体对不匹配项进行了一些错误控制。