在 VBA 中使用循环复制和粘贴时如何跳过非数字值?

Posted

技术标签:

【中文标题】在 VBA 中使用循环复制和粘贴时如何跳过非数字值?【英文标题】:How can I skip non-numeric values when copy and paste using loop in VBA? 【发布时间】:2019-04-15 09:25:34 【问题描述】:

我想使用 VBA 中的循环将公式从 P 列复制并粘贴到 C 列。代码应该只复制和粘贴 P 列中的数值,当单元格为空白时不执行任何操作。

Sub TestAll()

For i = 10 To 91
Worksheets("Hello").Range("P" & i).Formula = "=" & "MRound(" & Range("C" & 
i).Value & "+$C$7" & ",0.125)"
Next i

Application.CutCopyMode = False

Range("P10:P91").Select
Selection.Copy
Range("C10").Select
Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

End Sub

【问题讨论】:

你的公式没有意义...当 MRound 只有 2 个时,我可以看到 3 个参数。公式是否已经存在于 P 列上? @Damian:我不认为 OP 将 3 个参数传递给 MRound。这么说,罗伯特,请看看为什么我们不应该在 VBA 中使用 SelectActivate 之类的东西 【参考方案1】:

由于您已经在使用for 循环,您可以直接将数据复制到那里。 要检查它是否是数字数据,您可以使用IsNumeric( Expression )function,代码可能是这样的:

Sub TestAll()

    For i = 10 To 91
        Worksheets("Hello").Range("P" & i).Formula = "=" & "MRound(" & Range("C" & i).Value & "+$C$7" & ",0.125)"

        If (IsNumeric(Worksheets("Hello").Range("P" & i).Value)) Then
            Worksheets("Hello").Range("C" & i).Value = Worksheets("Hello").Range("P" & i).Value
        End If
    Next i

End Sub

注意:请注意,此检查是多余的,因为公式 会一遍又一遍地给你同样的结果。

希望对您有所帮助。

【讨论】:

P 列中的值将为 0 如果C 列中的相应单元格为空白。在这种情况下,它仍会将公式复制到目的地。您可能希望检查 C 列中的空单元格或相应单元格中的非数字值 谢谢,路易斯 - 它确实有帮助。在您的帮助下,我设法构建了答案。【参考方案2】:
Sub TestAll()

For i = 10 To 91
    If (IsEmpty(Worksheets("Hello").Range("C" & i).Value)) 
 Then
    Worksheets("Hello").Range("P" & i).Value = ""
    ElseIf (IsNumeric(Worksheets("Hello").Range("C" & 
i).Value)) Then
    Worksheets("Hello").Range("P" & i).Formula = "=" & 
"MRound(" & Range("C" & i).Value & "+$C$7" & ",0.125)"
    Else
    Worksheets("Hello").Range("P" & i).Value = 
"CALIBRATED"
    End If
Next i

Application.CutCopyMode = False

Range("P10:P91").Select
Selection.Copy
Range("C10").Select
Selection.PasteSpecial 
Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

End Sub

【讨论】:

以上是关于在 VBA 中使用循环复制和粘贴时如何跳过非数字值?的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel to Word - 对于下一个循环随机跳过数据

VBA自动过滤复制值,去重并粘贴到其他工作表中

VBA复制粘贴到新工作表,If语句和转置

Excel VBA在循环内复制和粘贴循环

excel VBA'循环时'的问题。似乎无法找到结束循环的布尔值

Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中