[爆卦]vba split空白是什麼?優點缺點精華區懶人包

為什麼這篇vba split空白鄉民發文收入到精華區:因為在vba split空白這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者MOONRAKER (㊣祕密情報員)看板Visual_Basic標題Re: [VBA ] 一格中...


: 推 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
fumizuki:我想Split()應該只是依照第2個參數給的字切割成陣列而已 01/07 07:26
fumizuki:vb js c# 都沒聽說過split是regex 0.0 01/07 07:27
fumizuki:本以為Filter()可以處理,不過測試的結果 空字串不能移除 01/07 07:28
fumizuki:想要用Filter()移除陣列中空的元素,會傳回空陣列Or2 01/07 07:30
fumizuki:不用vba,excel的資料剖析功能可以輕鬆做到 01/07 07:32
Y78:Dim a As Variant 01/07 22:21
Y78:a = Split("1.157 1255.2") 01/07 22:21
Y78:ubound(a) = 1 , a(0)=1.157 a(1)=1255.2 01/07 22:21
Y78:不是就這樣分而已嗎? 我沒試過vba不清楚 01/07 22:22
Y78:Split第一個引數是字串 然後第二個引數是要分隔的字串 01/07 22:22
Y78:第二個預設值是" " 就是以空白來分 然後會回傳一個陣列 01/07 22:23
MOONRAKER:你兩個數字中間隔超過一個以上的空白試試看 01/08 10:30
MOONRAKER:基本上以上討論的是這個問題 你才一個空白那隨便也會對 01/08 10:30
Y78:如果空白數固定的話 把split第二個引數改掉就好了 01/08 22:14
Y78:如果不是 那我會這樣寫 01/08 22:14
Y78:str = "1.157 1255.2" 01/08 22:21
Y78:x = Len(str) 01/08 22:22
Y78:a = Split(str) 01/08 22:22
Y78:str = Replace(str, " ", "") 01/08 22:22
Y78:a(0) & a(x - Len(str)) 就是你要的了 01/08 22:22
Y78:但是用Replace會把原字串取代 不想的話 可以這樣 01/08 22:23
Y78:把後面那個改成 a(x - Len(Replace(str, " ", ""))) 01/08 22:23
MOONRAKER:這也只有兩個才有效。 01/08 23:21
MOONRAKER:限制條件太多的解,實在是一點意義也沒有 01/08 23:21
MOONRAKER:試問你如何處理 k1 s1 k2 s2 ... k(n-1) s(n-1) kn 01/08 23:22
MOONRAKER:n 不確定,k(i)為單字,s(i)為空白,全都不等長 01/08 23:23
MOONRAKER:這你要怎麼處理?不巧real world中這種input滿地都是 01/08 23:24
MOONRAKER:隨便找一篇空白不齊的英文文章就是了 01/08 23:24
Y78:如果很多的話 就照你那招吧 我上面的解法純粹是針對只有2個的 01/08 23:26
Y78:突然想到 其實不用那麼麻煩 第二個只要 a(ubound(a))就好了 01/09 22:26

你可能也想看看

搜尋相關網站