插入公式(范围)然后复制>仅粘贴值
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
我想制作一个将公式复制到范围 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