2017-08-06 141 views
-2

我有一張表D列,其中我有一個ID格式爲使用isnumeric與vba

MG-456789; MG系列; MG-。

以上是ID的樣子在我的專欄D.

案件

我寧願有一個代碼,它以這樣一種方式工作,它會檢查MG後的數字 - 如果有6個數字出現,那麼它是有效的,否則我希望它在列S中被打印爲無效。

例如:如果有一個ID像; MG-Se然後我想列S打印爲無效;或MG-無效;像MG-456789然後它被接受,並不需要列S列印。

我試圖通過網絡,發現Isnumeric可用於檢查單元格中的數字。我可以看到特定的數字,但不是像我的一般情況下的代碼。

任何人都可以幫助我如何處理這種情況?任何領導都會有所幫助。

+0

它應該始終從「MG-」開始還是有其他字母和長度允許? – trincot

+0

它始終以MG- – Jenny

回答

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 
+0

開頭,請您評論一下它在做什麼? – Jenny

+0

Variant數組的解釋是[this](https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros/10717999#10717999) –

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-和隨後六位數字。

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 
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