验证多个国家/地区的邮政编码

问题描述 投票:0回答:2

我想要一个代码来检查 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 位数字也会使单元格变成绿色,这是正确的。

excel vba postal-code
2个回答
0
投票

你为什么让这件事变得如此困难?
当一个值只包含数字时,它会自动代表一个您可以检查的数字。如果包含其他字符,则数值为零。因此,如果您想检查一个四位数是否只包含数字(不以零开头),您可以简单地检查该值是否在 1000 到 9999 之间,如下面的屏幕截图所示:

颜色基于条件格式。该条件格式基于“B”列中的公式:

=AND(A2>=1000,A2<=9999)

0
投票

我为荷兰邮政编码制作了一个验证公式(它有效,也许是一个更短的版本):

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

© www.soinside.com 2019 - 2024. All rights reserved.