excel正则表达式宏匹配邮政编码并将其向右移动四列

时间:2013-02-25 20:28:54

标签: regex excel excel-vba vba

我正在使用一个大型excel文件,其中包含有关我公司合作的业务的大量信息。我刚刚导入了另一个大的excel文件,它们的格式不同。我们已经拥有的较大文件的地址,状态和邮政编码在不同的列中,每列间隔两个,如下所示:

enter image description here

我没有制作这个电子表格,否则我就不会把这样的列放在那里,但那就是那个使用它的女士喜欢它。

问题是我导入的工作表中的城市,州和邮政信息都在同一个单元格中,如下所示:

  

Trollville,NY 12345

我已经超过州,因为99%的新州都是相同的州,快速查找和替换所有工作。我现在离开了这个

  

Trollville 12345

我想将右边四列的邮政编码移到正确的单元格中。我写了一个基本的正则表达式,但对excel-vba不太了解,因为我多年没有使用它,但这就是我想出来的。我只是不知道如何告诉vba将匹配(我将其作为数组)输出到相应的列中。这就是我到目前为止所做的:

Function findZipCode(zipCode)
     Dim regEx As New VBScript_RegExp_55.RegExp
     Dim matches, s
     regEx.Pattern = "\s\d{5}\W"
     regEx.Global = True
     s = ""
     If regEx.Test(zipCode) Then
         Set matches = regEx.Execute(zipCode)
         For Each Match In matches
             s = s & Match.Value

         Next
         findZipCode = s
     Else
         findZipCode = ""
     End If
End Function

我需要添加什么?如果有更简单的方法,我也会接受替代方法。

提前感谢您的建议

1 个答案:

答案 0 :(得分:2)

您可以使用内置的Excel工作表函数吗?

将其放在目标列中=RIGHT(A2,5)将捕获字符串中最右边的5个字符,如果它们是数字的话。如果您的所有值数据值最后都有一个5位数的邮政编码,则此方法将有效。

或者,你可以用IF(ISNUMBER(VALUE(RIGHT(A2,5))),RIGHT(A2,5),"")之类的条件包装它,whcih会为进程添加一层验证。

此外,如果您的数据以逗号(或空格)分隔Data ribbon->Text to columns

,您是否知道有一个选项可以自动为您执行此操作