伊莉討論區
標題:
excel vlookup模糊比對
[打印本頁]
作者:
zbc231
時間:
2017-2-15 12:53 AM
標題:
excel vlookup模糊比對
小弟最近得幫一堆住址分組,
例如了地址如下:
新北市泰山區黎明里1鄰泰林路二段*巷*號
新北市泰山區大科里10鄰仁愛路*巷*號*樓
新北市泰山區義仁里4鄰辭修路*號
新北市泰山區新明里18鄰民國街*巷*之*號
新北市泰山區貴賢里7鄰新生路*號
分類依據有的是比對到里,有的是必須比對到鄰,
如:
黎明里、大科里10鄰為A組,
義仁里4鄰、新明里、貴賢里7鄰為B組,
網路上教學為=VLOOKUP(B2,分組依據,1)
某里或某里某鄰已被我定義為分類依據,1為組別,B2為完整地址,
但比對出來的狀況都指向同一組,
請問,有更好了比對函數嗎?或是我用了方式錯誤?
抑或是EXCEL無法做到上述功能呢?
謝謝大家的幫忙!
作者:
tryit244178
時間:
2017-2-16 09:31 AM
本帖最後由 tryit244178 於 2017-2-16 05:28 PM 編輯
查了一下,好像是比對文字的時候就會出包…
研究了好久。算了,搞不懂…自已寫一個比較快
貼到模組裡,儲存格裡打 =GetClass(
B2,分組依據,2
)
Public Function GetClass(ByVal sourceRange As Range, ByVal seachRange As Range, ByVal column As Integer) As String
Dim i As Integer
Dim seachValue As String
GetClass = "#N/A"
Select Case column
Case Is > seachRange.Columns.Count
GetClass = "#REF!"
Case Is <= 0
GetClass = "#VALUE!"
Case Else
For i = 1 To GetLastRow(seachRange)
seachValue = Left(sourceRange, Len(seachRange.Cells(i, 1).Value))
If Not seachValue = "" And seachRange.Cells(i, 1).Value = seachValue Then
GetClass = seachRange.Cells(i, column).Value
Exit For
End If
Next i
End Select
End Function
Private Function GetLastRow(ByVal sourceRange) As Integer
If sourceRange.Cells(sourceRange.Cells.Rows.Count, 1).End(xlUp).Row = 1 Then
GetLastRow = sourceRange.Cells.Rows.Count
Else
GetLastRow = sourceRange.Cells(sourceRange.Cells.Rows.Count, 1).End(xlUp).Row
End If
End Function
複製代碼
有2點要注意:
第一,分組依據裡,得把前面的地址全部打進去
也就是你不能只打什麼什麼里,要打「
新北市泰山區新明里」
像這樣才不會比對不出來
第二,把範圍比較小的排上面
像「
新北市泰山區新明里11鄰」如果排在「
新北市泰山區新明里」下面的話
就永遠不會抓到11鄰去
補充內容 (2017-2-16 05:25 PM):
哇咧!結果最後找到問題了…只要對 分組依據 做遞減排序就行了……真是浪費時間做白工…
作者:
zbc231
時間:
2017-2-17 12:39 AM
本帖最後由 zbc231 於 2017-2-17 12:45 AM 編輯
tryit244178 發表於 2017-2-16 09:31 AM
查了一下,好像是比對文字的時候就會出包…
研究了好久。算了,搞不懂…自已寫一個比較快
1、請問跟分組依據比對的地址要在同一個工作表中或是可以地址在工作表1、比對依據在工作表2。
2、比對一句我是利用名稱管理員針對AB兩欄去作的定義,這個定義的模式是正確的嗎?以上兩個疑問麻煩了,目前我這邊回傳的答案為#NAME?,
我想一定是我那邊沒有做好定義吧。
作者:
zbc231
時間:
2017-3-2 01:24 AM
感謝你的幫忙,
我後來用公式將地址中的里和里鄰分兩格找出,
然後去完整比對,來進行分組活動。
歡迎光臨 伊莉討論區 (http://a401.file-static.com/)
Powered by Discuz!