【问题标题】:Is there a faster way to copy-paste dynamic ranges in VBA?有没有更快的方法在 VBA 中复制粘贴动态范围?
【发布时间】:2019-02-18 14:50:15
【问题描述】:

我正在尝试将每日报告合并到一个主文档中。之前,我使用 Excel 函数来执行此操作。但是文件大小变得巨大。所以毕竟我想,我可以使用 VBA 来消除工作表上的大量函数,并减少文件大小和计算时间。

基本上,我在 Sheet1(主文档)上有主行号作为数据库。从 Sheet2 我需要每天为 Sheet1 上列出的行号完成工作量。

例如,在 Sheet1 中,单元格“M3”表示第一行号 (Line-01)。在单元格“X3”中,将有来自 Sheet2 范围“O:O”的工作量(10 个关节)。 这将根据每日表现在随机时间重复。所以我会有从“O3”到“O1000”范围内的数据(甚至更多)。

Sub DailyProgress()
    Dim i As Long

    Sheets(1).Activate

    Range("X3:X" & Range("M" & Rows.Count).End(xlUp).row).Formula = _
    "=IFERROR(vlookup(M3,Sheet2!D:O,12,0),Text(,))"

    i = 3
    'Because my first cell is on row 3
    Do Until IsEmpty(Cells(i, 12))        
        Cells(i, 24).Copy
        Cells(i, 24).PasteSpecial xlPasteValues

        i = i + 1
    Loop
End Sub

我编写了代码来进行 vlookup、复制和粘贴作为值。但是这个块不够光滑。顺便说一句,我需要将数据从 Sheet2 复制到单元格“Y3”和“Z3”。所以下次会花更多的时间。

【问题讨论】:

  • 有趣的公式..请问TEXT(,)的目的是什么?
  • 其实我以前在网上看到过这个。我用它代替引号使公式更清晰。喜欢=IF(A1=TEXT(,),TEXT(,),(B1*2))

标签: excel vba loops


【解决方案1】:

请注意,您可以使用Cells(i, 24).Value = Cells(i, 24).Value 而不是复制/粘贴,这应该会更快。此外,如果您不是对每个单元格执行此操作,而是一次针对整个范围执行此操作,则速度会更快:Range("X3", "X" & LastRow).Value = Range("X3", "X" & LastRow).Value

由于您已经确定了用于编写公式的 LastRow,因此您可以使用它来将其转换为一个值(无需循环)。

Sub DailyProgress()
    With Sheets(1).Range("X3:X" & .Range("M" & Rows.Count).End(xlUp).Row)
        .Formula = "=IFERROR(vlookup(M3,Sheet2!D:O,12,0),Text(,))"
        .Value = .Value
    End With
End Sub

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多