Excel 在VBA中使用循环复制和粘贴时,如何跳过非数值?
我想使用VBA中的循环将公式从p列复制粘贴到C列。代码应仅复制和粘贴P列中的数值,当单元格为空时不执行任何操作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
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