DUH,我发现我的Len(num)> 1,并且A列中的数字从0到9开始并重复。
For r = 58 To 616
num = Range("A" & r).Value
If IsNumeric(num) And Len(num) > 0 Then
Range("H" & r).Value = Range("I56").Value
Range("I" & r).Select
Application.CutCopyMode = False
ActiveCell.Formula = "=ABS(I54-H" & r & ")"
Range("J" & r).Select
ActiveCell.Formula = "=D" & r & "+(I55*I" & r & ")"
Range("J" & r).Select 'Set value
End If
Next r
答案 0 :(得分:1)
您可能只想对其进行调整,以便excel检查范围的Value
是否为数字而不是num
。另外,您可能只想检查长度是否大于0,因为这意味着单元格中存在某些内容。
If IsNumeric(Range("A" & r).Value) And Len(Range("A" & r).Value) > 0 Then
Range("H" & r).Value = Range("I56").Value
Range("I" & r).Formula = "=ABS(I54-H" & r & ")"
Range("J" & r).Formula = "=D" & r & "+(I55*I" & r & ")"
End If
或者,如果您的变量num
已经像下面这样存储为Integer
或Long
,则您实际上并不需要进行isNumeric()
检查,就像@ BigBen指出,Long
和Integer
变量将始终求值为Len() > 0
,因此,您真正想要的是显式检查该数字是否大于0。
Dim num As Long
num = Range("A" & r).Value
If num > 0 Then
Range("H" & r).Value = Range("I56").Value
Range("I" & r).Formula = "=ABS(I54-H" & r & ")"
Range("J" & r).Formula = "=D" & r & "+(I55*I" & r & ")"
End If
他们俩都应该做同样的事情。您还会注意到,我摆脱了代码中的.Select
调用,因为it's good practice to remove it