- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 85
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-4-9
               
|
8#
發表於 2012-2-8 19:27
| 只看該作者
回復 7# owen9399
樓主的資料並不包含直轄市地址格式
以下程式碼可判斷直轄市
並取得鄉、鎮、市、區的名稱做分類
請各位想想是否有更有效率且適用性更廣的方式- Sub ex()
- Dim Ay(2), Ary()
- Set d = CreateObject("Scripting.Dictionary")
- ar = Array("鄉", "鎮", "市", "區")
- With Sheets("Sheet1")
- Ay(0) = Array(.[A1].Value, .[B1].Value, .[C1].Value, .[D1].Value, .[E1].Value)
- For Each a In .Range("E2", .[E65536].End(xlUp))
- For i = 0 To 3
- If k < InStr(a, ar(i)) Then k = InStr(a, ar(i)): b = Mid(a, k, 1)
- Next
- '取得鄉鎮市區字串
- mystr = Mid(a, 1, k): k = 0
- If InStr(mystr, "縣") > 0 Then mystr = Mid(mystr, InStr(mystr, "縣") + 1) '去除縣名
- If InStr(mystr, "市") > 0 And InStr(mystr, "區") > 0 Then mystr = Mid(mystr, InStr(mystr, "市") + 1) '去除直轄市
- If Val(mystr) > 0 Then mystr = Mid(mystr, Len(CStr(Val(mystr))) + 1) '去除郵遞區號
- If IsEmpty(d(mystr)) Then '以未出現過的鄉鎮市區字串作為索引加入內容
- Ay(1) = Array(a.Offset(, -4).Value, a.Offset(, -3).Value, a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value)
- d(mystr) = Ay
- Else '以出現過的鄉鎮市區字串作為索引加入內容
- Ary = d(mystr) '取出陣列
- s = UBound(Ary)
- ReDim Preserve Ary(s + 1) '擴大陣列
- Ary(s) = Array(a.Offset(, -4).Value, a.Offset(, -3).Value, a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value)
- d(mystr) = Ary '寫回鄉鎮市區字串作為索引的內容
- End If
- Next
- End With
- With Sheets("Sheet2")
- .Cells = ""
- r = 1
- For Each ky In d.keys '以鄉鎮市區分類的迴圈
- For i = LBound(d(mystr)) To UBound(d(ky))
- .Cells(r, 1).Resize(, 5) = d(ky)(i) '寫入
- r = r + 1
- Next
- Next
- End With
- End Sub
複製代碼
地址分類.rar (14.04 KB)
|
|