lrow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
For p = 1 To lrow
    period(p) = p
Next p
With ws2
    lrow2 = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Range("A1").Offset(lrow2, 1).Resize(lrow).Value = Application.Transpose(period)
    ws1.Range(ws1.Cells(5, 1), ws1.Cells(lrow, 1)).Copy .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 2)
End With


如您所见,我正在尝试将数据列从一张纸复制到另一张纸,并且效果很好。但是,如果注意到我正在从1到lastrow的p中生成一个序列,这对我来说似乎很傻,因为我正在使用循环,并且我确定还有另一种方法可以将其复制并复制到另一张纸上。我该如何解决这个问题,因为从代码中删除application.transpose(period)行会使它运行时间缩短一半。如果有人可以提出建议,我要求一种更快的方法。谢谢。

例如。

  Sheet1                           Sheet2
  John                          1  John
  Jim                           2  Jim
  Jack                          3  Jack


我从Sheet1生成Sheet2,并且数字和名称在不同的列中。我可以像在代码中一样使用副本来命名,但是我需要自己生成数字。

最佳答案

这将输出您要查找的两列;一栏中的数字,下一栏中的名称:

Public Sub YourSolution()
    Dim v
    v = Sheet1.[CHOOSE({1,2},ROW(OFFSET(A1,,,COUNTA(A:A))),A1:INDEX(A:A,COUNTA(A:A)))]
    Sheet2.[b3:c3].Resize(UBound(v)) = v
End Sub


它应该足够快,以至您不必费心关闭屏幕更新或将计算设置为手动。

10-06 06:26