我有一张带有D列的表格,其中我有一个格式为
的IDMG-456789; MG系列; MG-。
以上是ID列在D列中的显示方式。
我希望有一个代码,它以这样的方式工作,它检查MG之后的数字 - 如果有6位数字,那么它是有效的,否则我希望它在列中打印为无效S.
例如:如果有类似的ID; MG-Se然后我希望列S打印为无效;或MG-无效;像MG-456789这样的东西然后被接受,不需要在S列打印。
我试图通过网络,发现可以使用Isnumeric来检查单元格中的数字。我可以想象特定的数字,但不是像我的通用案例的代码。
任何人都可以帮我解决这个问题吗?任何领导都会有所帮助。
答案 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