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

Excel 插入公式(范围),然后复制>;仅粘贴值,excel,vba,copy-paste,Excel,Vba,Copy Paste,我想制作一个宏,将公式复制到范围Q6:Q2500。宏插入公式后,应复制>仅粘贴值 [...] Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Range("Q6").Formula = "=IF(INDIRECT(""A""&ROW())="""","""",CONCATENATE(INDIRECT(""A""&ROW()),""/"",INDIRECT(""B

我想制作一个宏,将公式复制到范围
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
。我想这是因为公式更新太慢了


我在堆栈上看到了另一个线程,但答案是将公式转换为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

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

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

但是,首先将
公式
放入
单元格
,然后将
复制到
单元格
。这可以缩短为允许VBA计算
,并将其放入
单元格
。如果可以避免,建议不要使用
.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
子连接字符串()
暗淡单元格作为范围
作为字符串的调暗strJoin
带工作表(“表1”)
范围内的每个单元格(“Q6:Q2500”)
如果.Range(单元格偏移量(0,-16).Value)“,则
strJoin=.Range(cell.Offset(0,-16).Value).Value&“/”
strJoin=strJoin和.Range(单元格偏移量(0,-15).Value).Value和“/”
strJoin=strJoin和.Range(单元格偏移量(0,-12).Value).Value和“/”
strJoin=strJoin和.Range(单元格偏移量(0,-1).Value).Value
单元格值=strJoin
如果结束
下一个
以
端接头

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

但是,首先将
公式
放入
单元格
,然后将
复制到
单元格
。这可以缩短为允许VBA计算
,并将其放入
单元格
。如果可以避免,建议不要使用
.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
子连接字符串()
暗淡单元格作为范围
作为字符串的调暗strJoin
带工作表(“表1”)
范围内的每个单元格(“Q6:Q2500”)
如果.Range(单元格偏移量(0,-16).Value)“,则
strJoin=.Range(cell.Offset(0,-16).Value).Value&“/”
strJoin=strJoin和.Range(单元格偏移量(0,-15).Value).Value和“/”
strJoin=strJoin和.Range(单元格偏移量(0,-12).Value).Value和“/”
strJoin=strJoin和.Range(单元格偏移量(0,-1).Value).Value
单元格值=strJoin
如果结束
下一个
以
端接头

适用于搜索此文件的任何人。一般来说,要高效地粘贴值,请使用以下代码

With Selection
.Value = .Value
End With

对于搜索此的任何人。一般来说,要高效地粘贴值,请使用以下代码

With Selection
.Value = .Value
End With

可能的重复项,请参阅此问题和链接。我插入了一个力计算行(第二个答案),但它不适合我。。。此外,我不知道如何将此公式转换为VBA(第一个答案)。我将在几分钟后发布公式转换。请参阅我的答案以获取转换的可能副本,请参阅此问题和链接。我插入了一个力计算行(第二个答案),但它不适合我。。。另外,我不知道如何将这个公式转换为VBA(第一个答案)。我将在几分钟后发布公式转换。请参阅我的转换答案嗨,汤姆,很好的发现!我认为这将解决一个问题。但现在我有另一个问题。Excel计算公式的速度仍然太慢。现在每一行都是0。当您手工将公式放入单元格时,公式有效吗?是的,如果我删除
范围(“Q6:Q2500”)。复制范围(“Q6:Q2500”)。粘贴特殊xlPasteValues
行,公式也有效。但我只需要价值观。工作!非常感谢。插入更正的公式后,它不起作用。我必须重新启动Excel…………嗨,汤姆,很好的发现!我认为这将解决一个问题。但现在我有另一个问题。Excel计算公式的速度仍然太慢。现在每一行都是0。当您手工将公式放入单元格时,公式有效吗?是的,如果我删除
范围(“Q6:Q2500”)。复制范围(“Q6:Q2500”)。粘贴特殊xlPasteValues
行,公式也有效。但我只需要价值观。工作!非常感谢。插入更正的公式后,它不起作用。我必须重新记录Excel。。。。。。。。。。。。。。。。。。