作者MOONRAKER (㊣秘密情报员)
看板Visual_Basic
标题Re: [VBA ] 一格中有两个数字要分开
时间Tue Jan 6 22:29:23 2009
: 推 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!
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ https://www.youtube.com/user/JamesBondXD▄▄
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.217.159.164
1F:推 fumizuki:我想Split()应该只是依照第2个参数给的字切割成阵列而已 01/07 07:26
2F:→ fumizuki:vb js c# 都没听说过split是regex 0.0 01/07 07:27
3F:→ fumizuki:本以为Filter()可以处理,不过测试的结果 空字串不能移除 01/07 07:28
4F:→ fumizuki:想要用Filter()移除阵列中空的元素,会传回空阵列Or2 01/07 07:30
5F:→ fumizuki:不用vba,excel的资料剖析功能可以轻松做到 01/07 07:32
6F:推 Y78:Dim a As Variant 01/07 22:21
7F:→ Y78:a = Split("1.157 1255.2") 01/07 22:21
8F:→ Y78:ubound(a) = 1 , a(0)=1.157 a(1)=1255.2 01/07 22:21
9F:→ Y78:不是就这样分而已吗? 我没试过vba不清楚 01/07 22:22
10F:→ Y78:Split第一个引数是字串 然後第二个引数是要分隔的字串 01/07 22:22
11F:→ Y78:第二个预设值是" " 就是以空白来分 然後会回传一个阵列 01/07 22:23
12F:→ MOONRAKER:你两个数字中间隔超过一个以上的空白试试看 01/08 10:30
13F:→ MOONRAKER:基本上以上讨论的是这个问题 你才一个空白那随便也会对 01/08 10:30
14F:推 Y78:如果空白数固定的话 把split第二个引数改掉就好了 01/08 22:14
15F:→ Y78:如果不是 那我会这样写 01/08 22:14
16F:推 Y78:str = "1.157 1255.2" 01/08 22:21
17F:→ Y78:x = Len(str) 01/08 22:22
18F:→ Y78:a = Split(str) 01/08 22:22
19F:→ Y78:str = Replace(str, " ", "") 01/08 22:22
20F:→ Y78:a(0) & a(x - Len(str)) 就是你要的了 01/08 22:22
21F:→ Y78:但是用Replace会把原字串取代 不想的话 可以这样 01/08 22:23
22F:→ Y78:把後面那个改成 a(x - Len(Replace(str, " ", ""))) 01/08 22:23
23F:→ MOONRAKER:这也只有两个才有效。 01/08 23:21
24F:→ MOONRAKER:限制条件太多的解,实在是一点意义也没有 01/08 23:21
25F:→ MOONRAKER:试问你如何处理 k1 s1 k2 s2 ... k(n-1) s(n-1) kn 01/08 23:22
26F:→ MOONRAKER:n 不确定,k(i)为单字,s(i)为空白,全都不等长 01/08 23:23
27F:→ MOONRAKER:这你要怎麽处理?不巧real world中这种input满地都是 01/08 23:24
28F:→ MOONRAKER:随便找一篇空白不齐的英文文章就是了 01/08 23:24
29F:推 Y78:如果很多的话 就照你那招吧 我上面的解法纯粹是针对只有2个的 01/08 23:26
30F:推 Y78:突然想到 其实不用那麽麻烦 第二个只要 a(ubound(a))就好了 01/09 22:26