Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 爱疯

[已解决]转为以逗号分隔的字符串

  [复制链接]
发表于 2012-2-19 01:16 | 显示全部楼层
改成函数吧
Sub d()
x$ = " a bc def  g    hi "
For Each tmp In Split(x, " ")
   If Len(tmp) Then s = s$ & "," & tmp
Next
MsgBox Mid(s, 2)
End Sub

评分

参与人数 1 +30 金币 +18 收起 理由
爱疯 + 30 + 18

查看全部评分

回复

使用道具 举报

发表于 2012-2-19 01:19 | 显示全部楼层
还可把他打个调:
Sub d()
x$ = " a bc def  g    hi "
For Each tmp In Split(x, " ")
   If Len(tmp) Then s = "," & tmp & s$
Next
MsgBox Mid(s, 2)
End Sub
整短点安逸些
回复

使用道具 举报

发表于 2012-2-19 07:15 | 显示全部楼层
本帖最后由 leolee82 于 2012-2-19 07:26 编辑

常用功能就要写个速度快用内存少的函数
感觉这样速度比较快也少内存,过程中只分配一次内存t = String(Len(s), " ")
mid函数也是常量复杂度的

Function zh(s, sfind, sreplace)

Dim t As String, icount As Long
If Len(s) < 3 Then zh = Replace(s, sfind, ""): Exit Function
t = String(Len(s), " ")

icount = 1

For i = 2 To Len(s)
    If Mid(s, i, 1) = sfind Then
        If Mid(s, i - 1, 1) <> sfind Then
            Mid(t, icount, 1) = sreplace
            icount = icount + 1
        End If
    Else
        Mid(t, icount, 1) = Mid(s, i, 1)
        icount = icount + 1
    End If
Next
If Mid(t, icount - 1, 1) = "," Then
    zh = Left(t, icount - 2)
Else
    zh = Left(t, icount - 1)
End If
End Function

评分

参与人数 1 +14 金币 +18 收起 理由
爱疯 + 14 + 18

查看全部评分

回复

使用道具 举报

发表于 2012-2-19 08:53 | 显示全部楼层
利用特殊性,再整短点:
Sub d()
x$ = Trim(" a bc def  g    hi ")
Do While InStrRev(x, " ") - InStr(x, " ")
   x = Left(x, InStr(x, " ") - 1) & "," & Trim(Mid(x, InStr(x, " ")))
Loop
MsgBox x
End Sub
不具备通用性,只对初始以空格分开的有效。
回复

使用道具 举报

 楼主| 发表于 2012-2-19 14:35 | 显示全部楼层
本帖最后由 爱疯 于 2012-2-19 15:36 编辑

事先是空格的话,让trim占了便宜,我在试试事先是其它字符(比如"|")
13#的代码有点小问题,如果x="a b",会返回",b"
学习大家的方法!


(重新测。。)
回复

使用道具 举报

发表于 2012-2-19 15:17 | 显示全部楼层
14楼代码有漏洞,修正:
Sub d()
x$ = Trim(" a bc def  g    hi gyy") & " "
Do While InStrRev(x, " ") - InStr(x, " ")
   x = Left(x, InStr(x, " ") - 1) & "," & LTrim(Mid(x, InStr(x, " ")))
Loop
MsgBox RTrim(x)
End Sub
回复

使用道具 举报

 楼主| 发表于 2012-2-19 17:27 | 显示全部楼层
本帖最后由 爱疯 于 2012-2-19 18:45 编辑

为了增加适用性,把条件改为:变化前的空格是某种字符

6#、9#、10#、11#,通过修改,可得到正确结果。
2#、13#、14#,还没想好改的方法,如果作者能改改就好啦。{:011:}

回复

使用道具 举报

发表于 2012-2-19 17:36 | 显示全部楼层
转换前不是空格不可以将它转换成空格?
当然这样显得脱裤子打屁了
回复

使用道具 举报

 楼主| 发表于 2012-2-19 17:39 | 显示全部楼层
雪日骄阳 发表于 2012-2-19 17:36
转换前不是空格不可以将它转换成空格?
当然这样显得脱裤子打屁了

比较了一天,自己老出错,老改,现在听你这么一说,晕得不行了..... 其实,你的意思是什么呀




,{:19:}
回复

使用道具 举报

 楼主| 发表于 2012-2-19 17:56 | 显示全部楼层
现在,11#方法暂时领先{:011:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-28 23:23 , Processed in 0.925222 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表