excel - 在 Excel 中分隔街道名称和后缀的 VBA 或公式?

标签 excel vba

尝试在 Excel 中将数百万条街道名称与其后缀(“Ave”、“Dr”、“St”等)分开。有时街道没有后缀,因此需要一个空单元格。

Example result needed

我一开始尝试使用公式,但遇到了一些问题:

用下面突出显示的示例公式列出后缀,然后在最后一列中使用 CONCAT 将它们全部放在一列中,但有时它也会获取方向(“S”、“N”、“E”、“W”) ) 后缀, enter image description here

列出两个具有相同字母的后缀(例如“CI”、“CIR”), two suffixes with same letters

或者获取街道名称(如果它包含与后缀相同的字母)(请参阅“ST”列)。 street names with same letters as a listed suffix

我也尝试过快速填充,但这会产生更糟糕的结果。

我得出的结论是 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规则如下:

  • 您正在查找一组后缀中的一个(例如 AveDrStCir )
  • 前面有一个空格,并且
  • 后面是空格或字符串结尾

我建议为此使用正则表达式。

将引用(工具 -> 引用...)添加到 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/

相关文章:

Excel XLookup 检查日期是否在表中的两个值之间

excel - 获取datalabel标题源单元格地址

VBA MsgBox 导致错误

excel - 如何将事件 Excel 工作簿附加到电子邮件

vba - 创建从 Excel 流程图到 MS Word 标题的超链接

php - 一起使用 php 和 python

excel - 如何在 VBA 中复制和过滤 DAO 记录集?

excel - 如果单元格包含文本,则条件格式化整行

c# - 将 HRESULT 转换为可读消息

vba - 如何访问标记完成日期?