在 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 中使用 Select
或 Activate
之类的东西
【参考方案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 - 对于下一个循环随机跳过数据