[算表] 想把大量的數字字串套入特定格式

看板Office作者 (kinu)時間10年前 (2015/12/02 15:10), 10年前編輯推噓0(0018)
留言18則, 2人參與, 最新討論串1/1
軟體:office excel 版本:365 最近弄了不少的資料 想要把經緯度的格式套進去 比如 1210840065 代換成顯示121*09`29.202`` *=度(用科學符號輸入) 224546507  代換成顯示22*45`46.507`` VBA大量檔案迴圈巨集已經寫好 主要是內文 如果寫成只要儲存格只有9位數與10位數的數字 就會套上這格式會比較可行 想說用內容內含數字字串去跑 不過看起來會要跑兩次 這次來求解 希望能夠解決這個問題 --     (′▽‵ ) _____________ かんーまおーよんすっすー    / 丶  ヽ U CHU BIEN CAPSULE    | (よんすっすー)    / ヽ   / /__ 斯斯鼻炎膠嚢 ___ | くぉーそーよんすっすー    / /へ ヘ/ /スズレックス鼻炎カプセルA | (よんすっすー)   (_/| \_ノ/      θ       | びーさいびーえーんよんすっすー     /   /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Mr.よんすっすー -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.187.24 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1449040230.A.D42.html ※ 編輯: sinohara (36.226.187.24), 12/02/2015 15:11:27

12/02 15:16, , 1F
以只有9、10位數來套內的話,可用if配合len
12/02 15:16, 1F

12/02 15:44, , 2F
或是用select...case配合len
12/02 15:44, 2F
感謝 不過現在碰到的問題是 要如何把經緯標示套進去 這點就卡關了 ※ 編輯: sinohara (1.164.146.100), 12/03/2015 15:57:56

12/03 16:56, , 3F
那用迴圈配合format格式設為"#00\*00`00\.000``"
12/03 16:56, 3F

12/03 16:57, , 4F
執行的結果為 http://imgur.com/N1hz9TT
12/03 16:57, 4F

12/03 16:58, , 5F
如果這是原po要的就不用使用if或select..case配合len了
12/03 16:58, 5F
嗯 後來想到一個方法 用只要這張表的任一儲存格數值>200000000 就套用 Selection.NumberFormatLocal = "###""*""##""`""##"".""###``" 只是要看如何去抓這值了 Sub 變更經緯數值() p = "C:\Users\sinoharaizumi\Documents\新資料庫\01\" f = Dir(p & "*.xls") Do While f <> "" Workbooks.Open p & f For Each sh In Worksheets [想把函式寫進這邊 做大量代換] Next ActiveWorkbook.Close True f = Dir Loop End Sub 目前想寫的方法 不過要如何把if..then的格式寫進去 ※ 編輯: sinohara (1.160.102.111), 12/03/2015 22:22:54

12/03 22:43, , 6F
應也不用寫if,以sh.[a:a].numberformat =
12/03 22:43, 6F

12/03 22:44, , 7F
"###\*##`##\.###``" 的寫法,欄位再依實際修改
12/03 22:44, 7F

12/04 00:04, , 8F
在同一行的其他範圍內有單純六位數不要轉換 所以也不能
12/04 00:04, 8F

12/04 00:04, , 9F
全部代下去
12/04 00:04, 9F
目前排序是這樣 輸入數字 順序 地點   經度    緯度  1 A 1201532117 221532009 2 B 1203101 224513 3 C 1212143532 221430321 4 D 1201032440 223215772 5 E 1210351 221019 6 F 1212143532 221130321 7 G 1201034 221051 8 H 1202310 221040 目前顯示格式 順序 地點   經度    緯度  1 A 120153*21`17`` 22153*20`09`` 2 B 120*31`01`` 22*45`13`` 3 C 121214*35`32`` 22143*03`21`` 4 D 120103*24`40`` 22321*57`72`` 5 E 121*03`51`` 22*10`19`` 6 F 121214*35`32`` 22113*03`21`` 7 G 120*10`34`` 22*10`51`` 8 H 120*23`10`` 22*10`40`` 希望改成 顯示 順序 地點   經度    緯度  1 A 120*15`32.117`` 22153*20`09`` 2 B 120*31`01`` 22*45`13`` 3 C 121*21`43.532`` 22143*03`21`` 4 D 120*10`32.440`` 22321*57`72`` 5 E 121*03`51`` 22*10`19`` 6 F 121*21`43.532`` 22113*03`21`` 7 G 120*10`34`` 22*10`51`` 8 H 120*23`10`` 22*10`40`` 也就是原有比較短的數據不要動 只要碰到9/10位數的數據套用新的格式 ※ 編輯: sinohara (1.160.97.1), 12/04/2015 00:15:54

12/04 00:33, , 10F
那在for each sh in...內加上個迴圈,迴圈內則是加上if
12/04 00:33, 10F

12/04 00:34, , 11F
如果是用for..next或是do..loop的話,len(range.offset)
12/04 00:34, 11F

12/04 00:35, , 12F
for each 變數名稱 in 範圍集合的話,len(變數名稱)
12/04 00:35, 12F

12/04 00:35, , 13F
用select..case應也是可行
12/04 00:35, 13F

12/04 00:41, , 14F
另一種不用迴圈方式則是用設個計算字數len的輔助欄
12/04 00:41, 14F

12/04 00:43, , 15F
再用篩選range.autofilter,篩選9或是10
12/04 00:43, 15F

12/04 00:44, , 16F
配合range.specialcells可見儲存格,針對被篩選到的儲存格
12/04 00:44, 16F

12/04 00:44, , 17F
執行range.numberformat
12/04 00:44, 17F

12/04 01:25, , 18F
感謝 已解決 雖然寫起來跑得有點慢 但還是順利轉換
12/04 01:25, 18F
文章代碼(AID): #1MNfbcr2 (Office)
文章代碼(AID): #1MNfbcr2 (Office)