我有一些代码,我需要缩短数组或类似的东西,因为它需要很长时间才能运行。
我有一份复印纸和粘贴纸。
将表复制到副本表,宏将读取每列的标题,并将其粘贴到正确位置的粘贴表中。所以它基本上重新组织数据,可以与其他表对齐。
我有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")
对列标题标签和目标使用变量数组。
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返回到变体,我在不匹配时抛出了一些错误控件。