我想要一个代码来检查 A 列中的所有邮政编码,如果它通过 REGEX 模式,则将单元格变成绿色,如果没有通过,则将单元格变成红色。 我一直在使用下面的代码:
sub postcode()
Dim strPattern As String
Dim regEx As Object
Dim ncella As Long, i As Long
Dim rng As Range
Set regEx = CreateObject("VBScript.RegExp")
regEx.Global = True
regEx.IgnoreCase = True
ncella = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlDown).Row
For i = 1 To 2
If i = 1 Then
strPattern = "(\d{4})"
Set rng = Range("A2:A" & ncella)
End If
regEx.Pattern = strPattern
For Each cell In rng.Rows ' Define your own range here
If strPattern <> "" And cell <> "" Then ' If the cell is not empty and there is pattern
If regEx.test(cell.Value) Then ' Check if there is a match
cell.Interior.ColorIndex = 4 ' If yes, change the background color
Else
cell.Interior.ColorIndex = 3
End If
End If
Next
Next i
End Sub
现在我还想使用此检查来验证多个国家/地区的邮政编码模式,因此(一旦提供了上述代码或任何其他代码),那么一旦用户选择了 ISO 国家/地区代码,我就需要验证这些模式,本质上是将模式应用于特定国家。
希望以上内容有道理
上面是一个简单的检查,看看邮政编码中是否有 4 位数字,然后变成绿色。如果我粘贴 1、2、3 或 4 位数字,单元格会正确变为红色,但如果我有 6 位或更多数字,它会由于某种原因变为绿色。拥有 5 位数字也会使单元格变成绿色,这是正确的。
我为荷兰邮政编码制作了一个验证公式(它有效,也许是一个更短的版本):
=EN(ISGETAL(WAARDE(链接(A1;4))); LENGTE(A1)=7; EN(ISTEKST(A1); 代码(RECHTS(A1;1)) >= 65; 代码(RECHTS(A1; 1)) <= 90; CODE(RECHTS(A1;2)) >= 65; 代码(RECHTS(A1;2)) <= 90); CODE(RECHTS(A1;3)) = 32)