如果IsNumeric(num)和Len(num)> 1对一个数字求假?

时间:2018-09-10 19:10:59

标签: vba excel-vba

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

1 个答案:

答案 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已经像下面这样存储为IntegerLong,则您实际上并不需要进行isNumeric()检查,就像@ BigBen指出,LongInteger变量将始终求值为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