在地址中find匹配的郊区

我有一个Excel表和每行上的地址列表

COLUMN A My Company 123 Big Street Ashgrove QLD 4111 A Better Compant PO Box 123 Sandgate QLD 4111 

我在另一张表格里,每个QLD郊区都按字母顺序排列,名字叫做rSuburbs

 Ashgrove BBBB CCC Sandgate Zilmere 

我可以写什么公式来find最接近的匹配并将其转储出来,即:

 COLUMN A COLUMN B My Company 123 Big Street Ashgrove QLD 4111 Ashgrove A Better Compant PO Box 123 Sandgate QLD 4111 Sandgate 

试试这个公式在B2中复制下来

=LOOKUP(2^15,SEARCH(" "&rSuburbs&" "," "&A2&" "),rSuburbs)

使用“”并确保你不会得到部分匹配

假设你的郊区列表在K2:6栏中,标题为K1:

{=INDEX(K:K,LARGE(IFERROR(FIND($K$2:$K$6,A2)*0+ROW(A$2:A$6),0),1))}

数组公式必须用Ctrl + Shift + Enter确认 – 不要手动input波形花括号!

这将返回所需的输出。

基本上,找出每个列表是否在列A中的文本中,如果是,则返回郊区的行号,否则返回零。并且取得您获得的最大索引的郊区。

如果您对vba解决scheme感兴趣,则会在列B中打印郊区名称,修改为匹配您的工作簿。

 Option Explicit Sub splitlr() Dim wb As Workbook Dim ws As Worksheet Dim s As String, str As String Dim i As Integer, j As Integer, k As Integer, l As Integer Dim lr As Long Dim a As Long Set wb = ThisWorkbook Set ws = wb.Sheets("Sheet1") lr = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 With ws a = 1 Do Until a = lr s = .Range("A" & a).Text i = Len(s) j = InStrRev(s, " ") - 1 k = InStrRev(s, " ", j) - 1 l = InStrRev(s, " ", k) str = Mid(s, l, (i - k)) .Range("B" & a).Value = str a = a + 1 Loop End With End Sub