插入公式(范围)然后复制>仅粘贴值

Insert formulas (range) then copy>paste values only

我想制作一个将公式复制到范围 Q6:Q2500 的宏。宏插入公式后,它应该只复制>粘贴值。

[...]
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Range("Q6").Formula = "=IF(INDIRECT(""A""&ROW())="""","""",CONCATENATE(INDIRECT(""A""&ROW()),""/"",INDIRECT(""B""&ROW()),""/"",INDIRECT(""E""&ROW()),""/"",INDIRECT(""P""&ROW())))"
Range("Q6").Copy
Range("Q6:Q2500").PasteSpecial (xlPasteAll)
Range("Q6:Q2500").PasteSpecial xlPasteValues

End Sub

当我 运行 这个宏时,它会按预期插入公式。但是,当我尝试仅粘贴值时,我会重复第一个值,直到 Q2500。我觉得是因为公式更新太慢了

我在 Stack 上看到另一个帖子,但答案是将公式转换为 VBA 函数。我不知道如何转换这个公式。

您将 Q6 的内容粘贴了两次,而不是复制整列的值。

Range("Q6").Formula = "=IF(INDIRECT(""A""&ROW())="""","""",CONCATENATE(INDIRECT(""A""&ROW()),""/"",INDIRECT(""B""&ROW()),""/"",INDIRECT(""E""&ROW()),""/"",INDIRECT(""P""&ROW())))"
Range("Q6").Copy
Range("Q6:Q2500").PasteSpecial (xlPasteAll)

If Application.CalculationState = xlDone Then
    Range("Q6:Q2500").Copy
    Range("Q6:Q2500").PasteSpecial xlPasteValues
End If

您在计算完成之前进行转换,这是导致问题的原因。

然而,您首先将 Formula 放置到 Cell,然后将 Value 复制到 Cell。这可以简化为让 VBA 计算 Value 并将其放入 Cell。如果可以避免,建议不要使用.Copy.Paste

参见示例:

Sub JoinStrings()
    Dim cell As Range
    Dim strJoin As String

    With Worksheets("Sheet1")
        For Each cell In .Range("Q6:Q2500")
            If .Range(cell.Offset(0, -16).Value) <> "" Then
                strJoin = .Range(cell.Offset(0, -16).Value).Value & "/"
                strJoin = strJoin & .Range(cell.Offset(0, -15).Value).Value & "/"
                strJoin = strJoin & .Range(cell.Offset(0, -12).Value).Value & "/"
                strJoin = strJoin & .Range(cell.Offset(0, -1).Value).Value
                cell.Value = strJoin
            End If
        Next
    End With
End Sub

任何搜索此内容的人。通常要有效地粘贴值,请使用以下代码。

With Selection
.Value = .Value
End With