使用isnumeric和vba

时间:2017-08-06 09:24:54

标签: excel vba excel-vba

我有一张带有D列的表格,其中我有一个格式为

的ID

MG-456789; MG系列; MG-。

以上是ID列在D列中的显示方式。

我希望有一个代码,它以这样的方式工作,它检查MG之后的数字 - 如果有6位数字,那么它是有效的,否则我希望它在列中打印为无效S.

例如:如果有类似的ID; MG-Se然后我希望列S打印为无效;或MG-无效;像MG-456789这样的东西然后被接受,不需要在S列打印。

我试图通过网络,发现可以使用Isnumeric来检查单元格中的数字。我可以想象特定的数字,但不是像我的通用案例的代码。

任何人都可以帮我解决这个问题吗?任何领导都会有所帮助。

4 个答案:

答案 0 :(得分:2)

试试这段代码。

Sub test()
    Dim vDB, vR()
    Dim Ws As Worksheet
    Dim n As Long, i As Long, s As String
    Set Ws = ActiveSheet
    With Ws
        vDB = .Range("d2", .Range("d" & Rows.Count).End(xlUp))
    End With
    n = UBound(vDB, 1)
    ReDim vR(1 To n, 1 To 1)
    For i = 1 To n
        s = Replace(vDB(i, 1), "MG-", "")
        If Len(s) = 6 And IsNumeric(s) Then
        Else
            vR(i, 1) = "false"
        End If
    Next i
    Ws.Range("s2").Resize(n) = vR
End Sub

答案 1 :(得分:1)

使用Like运算符很容易:

If myString Like "MG-[0-9][0-9][0-9][0-9][0-9][0-9]" Then
    MsgBox "Valid ID"
Else
    MsgBox "Invalid ID"
End If

[0-9]代表任何数字,因此,它将匹配以MG-开头并后跟六位数字的任何字符串。

答案 2 :(得分:1)

您也可以将其编写为要调用的函数

=CheckMG1(D2) 

并拉下

Function CheckMG1(s As String) As String
If Len(s) = 9 And Left(s, 3) = "MG-" And IsNumeric(Right(s, 6)) Then
    CheckMG1 = "OK"
Else
    CheckMG1 = "Invalid"
End If
End Function

答案 3 :(得分:1)

您可以尝试使用更简单的代码,

Sub MG()
Dim i As Long
For i = 1 To Cells(Rows.Count, "D").End(xlUp).Row
    If IsNumeric(Replace(Cells(i, "D"), "MG-", "")) Then
        Cells(i, "S") = "Valid"
    Else
        Cells(i, "S") = "InValid"
    End If
Next i
End Sub