Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中使用循环复制和粘贴时,如何跳过非数值?_Excel_Vba_Loops_Isnumeric - Fatal编程技术网

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

Excel 在VBA中使用循环复制和粘贴时,如何跳过非数值?,excel,vba,loops,isnumeric,Excel,Vba,Loops,Isnumeric,我想使用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

我想使用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

由于您已经在为循环使用
,因此可以直接将数据复制到那里
要检查它是否为数值数据,可以使用
IsNumeric(Expression)
函数
,代码可以如下所示:

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
注意:请注意,此检查是多余的,因为公式 会给你一次又一次相同的结果


希望这有帮助。

你的公式毫无意义。。。当MRound只有2个参数时,我可以看到它有3个参数。公式是否已经存在于P列中?@Damian:我认为OP没有将3个参数传递给
MRound
。罗伯特,既然如此,请研究一下为什么我们不应该在VBAValue中使用
Select
Activate
之类的东西
P
列中的值为0,因为
C
列中的相应单元格为空。在这种情况下,仍然会将公式复制到目标。您可能希望在
C列中检查空单元格,或者在相应的单元格中检查非数值。谢谢,路易斯,这确实有帮助。我设法在你的帮助下得出了答案。
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