標題:
[發問]
[已解決]如何地址分類
[打印本頁]
作者:
owen9399
時間:
2012-2-6 10:10
標題:
[已解決]如何地址分類
本帖最後由 owen9399 於 2012-2-9 15:49 編輯
[attach]9458[/attach]
如何寫 函數 或 vba
自動分類資料:
把資料貼上 sheet1 的表單 , 新增按鈕 (地址自動分類)
儲存於 sheet2的表單
1.其中 舊資料中的 彰化縣彰化市田中里24鄰彰泰二街28之11號
變成 新資料 彰化市彰泰二街28之11號
去除 彰化縣 田中里 24鄰 保留 彰化市
但是 保留 彰化縣和美鎮 ...彰化縣鹿港鎮 ....等 外縣鄉鎮
2.
自動排列 QTY的數值 由 大排到小
3.分區域儲存 資料於 sheet2 的表
彰化市的 放一起
彰化縣芬園鄉+彰化縣和美鎮+彰化縣線西鄉 放一起
彰化縣鹿港鎮放一起
彰化縣溪湖鎮放一起
各區 空格距離(間距)10列
[attach]9460[/attach]
謝謝大大
另外 sheet2的表單
zip的數字 就不要顯示出來 可以自動刪除
地址範本:
彰化縣溪湖鎮中山里20鄰大溪路一段703號
彰化縣芬園鄉圳墘村4鄰彰南路一段845號
彰化市西興里景宗街66巷21號
彰化縣鹿港鎮溝墘里6鄰溝墘巷208號
彰化縣鹿港鎮新宮里7鄰文開路6巷21號
彰化縣鹿港鎮景福里9鄰景福巷111號
彰化縣溪湖鎮中山里3鄰大溪路1段494號
彰化縣溪湖鎮東溪里2鄰銀錠路232巷74弄3號
彰化縣溪湖鎮中山里3鄰大溪路1段494號
彰化市中正路二段94號
彰化縣線西鄉頂犁村11鄰頂犁路123號
彰化縣芬園鄉圳墘村10鄰碧園路一段355巷5號
彰化縣彰化市下
作者:
owen9399
時間:
2012-2-7 00:08
我目前 有用 字串 來取代
但有一些問題
作者:
Hsieh
時間:
2012-2-7 00:54
本帖最後由 Hsieh 於 2012-2-7 01:23 編輯
回復
2#
owen9399
可製作一個分類表
再以分類表為標準來分類如圖
[attach]9475[/attach]
Sub nn()
Dim Ar(2), Ay()
Set d = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
Ar(0) = Array(.[A1].Value, .[B1].Value, .[C1].Value, .[D1].Value, .[E1].Value)
For Each a In .Range("E2", .[E65536].End(xlUp))
i = IIf(InStr(a, "縣") > 0, 4, 1)
mystr = Mid(a, i, 3)
Set B = .Columns("I:K").Find(mystr, lookat:=xlWhole)
If B Is Nothing Then
ky = 5
Else
ky = .Cells(B.Row, "H").Value
End If
If IsEmpty(d(ky)) Then
Ar(1) = Array(a.Offset(, -4).Value, a.Offset(, -3).Value, a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value)
d(ky) = Ar
Else
Ay = d(ky)
s = UBound(Ay)
ReDim Preserve Ay(s + 1)
Ay(s) = Array(a.Offset(, -4).Value, a.Offset(, -3).Value, a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value)
d(ky) = Ay
Erase Ay
End If
Next
End With
With Sheets("Sheet2")
.[A:F] = ""
r = 1
For Each ky In d.keys
For i = LBound(d(ky)) To UBound(d(ky))
.Cells(r, "A").Resize(, 5) = d(ky)(i)
r = r + 1
Next
Next
End With
End Sub
複製代碼
作者:
owen9399
時間:
2012-2-7 11:41
本帖最後由 owen9399 於 2012-2-7 12:53 編輯
請問 超級版主 Hsieh 或 各位大大
1.可以修改 以此順序 排列
H I J K L
分組 鄉鎮市區
1 彰化市
2 花壇鄉 秀水鄉 埔鹽鄉 溪湖鎮
3 鹿港鎮 福興鄉
4 線西鄉 伸港鄉 和美鎮 芬園鄉
2.設定 每頁的大小 固定 列印範圍 版面設定 上.下.左.右: 各為1cm
3.設定 分頁 如 分組1 為一頁
A_NO A_NM QTY TEL ADDR
32848 羅** 265000 04-75*** 彰化市西興里景宗街**巷2*號
另外 請問
我有新增 彰化市 的 (例如:500 . 彰化縣 . 彰化縣彰化市 . 0001里 . 13鄰...等 ) 用字串 表示 取代 或 不顯示 ,但是 有些問題 ,
如: 500彰化縣彰化市延平里15鄰中山路1段509號 按下 修改按鈕
顯示 彰化市1中山路1段509號 (15鄰的 1 未被取代 成不顯示)
另外 附上 完整的清單的結果 + 如何修正檔的資料表
[attach]9476[/attach]
[attach]9477[/attach]
謝謝大大的指導
彰化市 放一起
花壇鄉 秀水鄉 埔鹽鄉 溪湖鎮 的放一起
但是 空一格
例如:
A_NO A_NM QTY TEL ADDR
32848 羅** 265000 04-75*** 彰化縣花壇鄉景宗街**巷2*號
A_NO A_NM QTY TEL ADDR
328 林** 26000 04-75*** 彰化縣秀水鄉溪心街**巷12*號
3268 王** 20230 04-75*** 彰化縣秀水鄉溪心街10**號
作者:
Hsieh
時間:
2012-2-7 15:25
本帖最後由 Hsieh 於 2012-2-7 15:29 編輯
回復
4#
owen9399
鄉鎮市區做分類不是嗎?
Sub Ex()
Dim Mystr$, Ar(2), Ay()
Set d = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
Ar(0) = Array(.[A1].Value, .[B1].Value, .[C1].Value, .[D1].Value, .[E1].Value)
For Each a In .Range("E2", .[E65536].End(xlUp))
i = IIf(InStr(a, "縣") > 0, 4, 1) + IIf(Val(a) > 0, Len(CStr(Val(a))), 0) '判斷鄉鎮市區的起始位置
Mystr = Mid(a, i, 3) '鄉鎮市區
If IsEmpty(d(Mystr)) Then
Ar(1) = Array(a.Offset(, -4).Value, a.Offset(, -3).Value, a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value)
d(Mystr) = Ar '以鄉鎮市區做索引加入內容
Else
Ay = d(Mystr)
s = UBound(Ay)
ReDim Preserve Ay(s + 1)
Ay(s) = Array(a.Offset(, -4).Value, a.Offset(, -3).Value, a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value)
d(Mystr) = Ay '以鄉鎮市區做索引加入內容
End If
Next
End With
With Sheets("Sheet2")
.PageSetup.PrintArea = "$A:$E" '列印範圍
.ResetAllPageBreaks '重設分頁線
.Cells = ""
r = 1
For Each ky In d.keys
For i = LBound(d(ky)) To UBound(d(ky))
.Cells(r, 1).Resize(, 5) = d(ky)(i) '寫入
r = r + 1
Next
.HPageBreaks.Add .Cells(r, "A") '增加分頁
Next
End With
End Sub
複製代碼
作者:
GBKEE
時間:
2012-2-7 16:15
回復
4#
owen9399
字串的替換
Sub 按鈕3_Click()
Range("E2:E65536").Replace What:="*彰化市*鄰", Replacement:="彰化市", LookAt:=xlPart
End Sub
複製代碼
作者:
owen9399
時間:
2012-2-8 11:11
謝謝各位大大的 講解與分享
作者:
Hsieh
時間:
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
複製代碼
[attach]9501[/attach]
作者:
owen9399
時間:
2012-2-9 10:40
本帖最後由 owen9399 於 2012-2-9 10:42 編輯
謝謝 大大的提供
想請問 如何固定 A1~E1的欄寬
例如: A1欄寬為8 , B1欄寬為9 ,C1欄寬為10 , D1欄寬為10 ,E1 欄寬為 50
就算 從別的B資料 複製 ,貼上 其欄位也保持不變
作者:
register313
時間:
2012-2-9 10:50
回復
9#
owen9399
選A欄位標籤, 格式/欄/欄寬 ,輸入8
....
欄寬本來就是固定的,除非自己去改變它,所以應不需要用VBA去設定欄寬
VBA語法
Columns("A:A").ColumnWidth =8
作者:
owen9399
時間:
2012-2-9 11:08
謝謝大大 那麼 由 Sheet1 輸入資料, 存入 sheet2 其固定欄位如何設定
作者:
register313
時間:
2012-2-9 11:18
回復
11#
owen9399
不太了解說明
先點選SHEET1工作表標籤名稱,按住Ctrl鍵,再點選SHEET2工作表標籤名稱(SHEET1,SHEET2作群組)
再去設定欄寬(SHEET1,SHEET2欄寬會一致 )
點選SHEET1工作表標籤名稱(取消群組)
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)