Re: [VBA ] 一格中有兩個數字要分開

看板Visual_Basic作者 (㊣祕密情報員)時間17年前 (2009/01/06 22:29), 編輯推噓6(6024)
留言30則, 3人參與, 最新討論串3/4 (看更多)
: 推 fumizuki:Excel XP 測試 Regular Expression無效@@ 01/06 21:34 : → MOONRAKER:啊?可是我這邊的程式是用Excel 2003跑出來的啊 01/06 22:11 : → MOONRAKER:馬上再測一遍,真的回家就沒效…那先前到底是怎麼弄的… 01/06 22:14 回憶起來一些細節,當時我曾想看ubound(segs)的值,怎麼看都是0 那時怎麼想也想不透,現在想通了,因為那時根本沒切出token 看來regex的寫法真的是沒效,我洨了,對不起大家 XD 回到正題,我一直不懂為什麼split()每兩個分隔符號之間就一定拆出一個子字串 就算長度0也照拆 所以碰到單字間有一個以上的空白,陣列裡就會有很多空字串 "" 我會這樣寫來跳過空字串: Sub abc() For i = 1 To 4 segs = Split(Cells(i, 1), " ") j = 0 ' j : 在下面的 for 中使用,用來查看結果陣列 segs x = 1 ' x : 現在抓到的非0元素是第幾個 For j = 0 To UBound(segs) If segs(j) <> "" Then ' 確定這一個元素不是空字串… x = x + 1 ' 才寫到工作表上 Cells(i, x) = segs(j) End If Next j Next i End Sub 我也不知道有什麼更好的方法 或者我用split() 的方法一直都不對?(所以下午才呆到以為真的可以用regex)   -- BATCH 03 : 買張床 - 切達大俠 - 伐木人之歌 - http://tinyurl.com/3zpyx5 [B4準備中]: 謳歌金錢(7/02) - 單車超人(7/23) - http://tinyurl.com/66v6vq [ 番外篇 ]: 包租婆也有過當羅莉的時候(7/17) - http://tinyurl.com/6j4ale ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 蒙帝派松正體中文計畫 Spam-a-lot and enjoy the pythonesque delight! ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ http://www.youtube.com/user/JamesBondXD▄▄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.159.164

01/07 07:26, , 1F
我想Split()應該只是依照第2個參數給的字切割成陣列而已
01/07 07:26, 1F

01/07 07:27, , 2F
vb js c# 都沒聽說過split是regex 0.0
01/07 07:27, 2F

01/07 07:28, , 3F
本以為Filter()可以處理,不過測試的結果 空字串不能移除
01/07 07:28, 3F

01/07 07:30, , 4F
想要用Filter()移除陣列中空的元素,會傳回空陣列Or2
01/07 07:30, 4F

01/07 07:32, , 5F
不用vba,excel的資料剖析功能可以輕鬆做到
01/07 07:32, 5F

01/07 22:21, , 6F
Dim a As Variant
01/07 22:21, 6F

01/07 22:21, , 7F
a = Split("1.157 1255.2")
01/07 22:21, 7F

01/07 22:21, , 8F
ubound(a) = 1 , a(0)=1.157 a(1)=1255.2
01/07 22:21, 8F

01/07 22:22, , 9F
不是就這樣分而已嗎? 我沒試過vba不清楚
01/07 22:22, 9F

01/07 22:22, , 10F
Split第一個引數是字串 然後第二個引數是要分隔的字串
01/07 22:22, 10F

01/07 22:23, , 11F
第二個預設值是" " 就是以空白來分 然後會回傳一個陣列
01/07 22:23, 11F

01/08 10:30, , 12F
你兩個數字中間隔超過一個以上的空白試試看
01/08 10:30, 12F

01/08 10:30, , 13F
基本上以上討論的是這個問題 你才一個空白那隨便也會對
01/08 10:30, 13F

01/08 22:14, , 14F
如果空白數固定的話 把split第二個引數改掉就好了
01/08 22:14, 14F

01/08 22:14, , 15F
如果不是 那我會這樣寫
01/08 22:14, 15F

01/08 22:21, , 16F
str = "1.157 1255.2"
01/08 22:21, 16F

01/08 22:22, , 17F
x = Len(str)
01/08 22:22, 17F

01/08 22:22, , 18F
a = Split(str)
01/08 22:22, 18F

01/08 22:22, , 19F
str = Replace(str, " ", "")
01/08 22:22, 19F

01/08 22:22, , 20F
a(0) & a(x - Len(str)) 就是你要的了
01/08 22:22, 20F

01/08 22:23, , 21F
但是用Replace會把原字串取代 不想的話 可以這樣
01/08 22:23, 21F

01/08 22:23, , 22F
把後面那個改成 a(x - Len(Replace(str, " ", "")))
01/08 22:23, 22F

01/08 23:21, , 23F
這也只有兩個才有效。
01/08 23:21, 23F

01/08 23:21, , 24F
限制條件太多的解,實在是一點意義也沒有
01/08 23:21, 24F

01/08 23:22, , 25F
試問你如何處理 k1 s1 k2 s2 ... k(n-1) s(n-1) kn
01/08 23:22, 25F

01/08 23:23, , 26F
n 不確定,k(i)為單字,s(i)為空白,全都不等長
01/08 23:23, 26F

01/08 23:24, , 27F
這你要怎麼處理?不巧real world中這種input滿地都是
01/08 23:24, 27F

01/08 23:24, , 28F
隨便找一篇空白不齊的英文文章就是了
01/08 23:24, 28F

01/08 23:26, , 29F
如果很多的話 就照你那招吧 我上面的解法純粹是針對只有2個的
01/08 23:26, 29F

01/09 22:26, , 30F
突然想到 其實不用那麼麻煩 第二個只要 a(ubound(a))就好了
01/09 22:26, 30F
文章代碼(AID): #19Osh98T (Visual_Basic)
文章代碼(AID): #19Osh98T (Visual_Basic)