尝试在 Excel 中将数百万条街道名称与其后缀(“Ave”、“Dr”、“St”等)分开。有时街道没有后缀,因此需要一个空单元格。
我一开始尝试使用公式,但遇到了一些问题:
用下面突出显示的示例公式列出后缀,然后在最后一列中使用 CONCAT 将它们全部放在一列中,但有时它也会获取方向(“S”、“N”、“E”、“W”) ) 后缀,
或者获取街道名称(如果它包含与后缀相同的字母)(请参阅“ST”列)。
我也尝试过快速填充,但这会产生更糟糕的结果。
我得出的结论是 VBA 是最有效的,因为我必须对多个数据集重复此过程,但如果有其他建议,我愿意。
我在 VBA 方面非常新手,但这是我到目前为止所拥有的,我不知道如何扩展/继续它:
Sub getSuffix()
Dim i As Range
For Each i In Range("A1")
Do
If InStr(ActiveCell.Value, " AVE") > 0 Then
ActiveCell.Offset(0, 1).Value = "AVE"
ActiveCell.Offset(1, 0).Select
Else
If IsEmpty(ActiveCell.Value) Then
Exit For
End If
End If
Loop
Next i
End Sub
最佳答案
AFAICT规则如下:
- 您正在查找一组后缀中的一个(例如
Ave
、Dr
、St
、Cir
) - 前面有一个空格,并且
- 后面是空格或字符串结尾
我建议为此使用正则表达式。
将引用(工具 -> 引用...)添加到 Microsoft VBScript 正则表达式 5.5 库。
然后你可以编写如下代码:
Option Explicit
Dim re As RegExp
Function GetSuffix(address As String) As String
If re Is Nothing Then
Set re = New RegExp
re.IgnoreCase = True
re.Pattern = " (Ave|Dr|St|Cir)( |$)"
End If
Dim matches As MatchCollection
Set matches = re.Execute(address)
If matches.Count > 0 Then GetSuffix = matches(0).SubMatches(0)
End Function
并在单元格公式中使用该函数:
=GetSuffix(A4)
它将返回第一个匹配的后缀,不包括任何后续字符。
您可能想要添加更多后缀,例如:
re.Pattern = " (Ave|Dr|St|Cir|Wy|Ci|Pl|Aisle)( |$)"
链接:
关于excel - 在 Excel 中分隔街道名称和后缀的 VBA 或公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66340201/