Excel精英培训网

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

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

  [复制链接]
发表于 2012-2-21 13:22 | 显示全部楼层
本帖最后由 Dj_soo 于 2012-2-21 13:23 编辑

你把function后面加个string类型,function内的几个变量也都赋予string类型试试能提速多少?
  1. Sub a()
  2. Dim x$
  3. x = "|| a |bc||| ||||def| |g|| | ||| |||| h|i| ||"
  4. MsgBox zh(x, "|", ",")
  5. End Sub

  6. Function zh(x as string, y as string, z as string) as string '转为形如"a,bc,def,g,hi"这样的字符串
  7. With CreateObject("vbscript.regexp")
  8. .Global = True
  9. .Pattern = "(^" & y & "+)|(" & y & "+$)"
  10. x = .Replace(x, "")
  11. .Pattern = "" & y & "+"
  12. zh = .Replace(x, z)
  13. End With
  14. End Function
复制代码

点评

我就是用你的表达式和替换,在24楼里测的,你也44看吧  发表于 2012-2-21 13:25
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2012-2-21 13:24 | 显示全部楼层
Dj_soo 发表于 2012-2-21 13:22
你把function后面加个string类型,function内的几个变量也都赋予string类型试试能提速多少?

你可以下载24楼,当前最新是第6次更新来测试。

因为一说,话就多了。用“大”来测试明显些,反正是提速不少呀。

还有哪些想试试,改动,测试,查看,还是比较方便的
回复

使用道具 举报

发表于 2012-2-21 13:45 | 显示全部楼层
改完后还是2L修改后的最快,因为只执行了一次替换,而且pattern很简单.
大量数据明显是正则优势.即使我执行两次查询替换都要快不少
回复

使用道具 举报

发表于 2012-2-21 18:04 | 显示全部楼层
爱疯 发表于 2012-2-19 17:56
现在,11#方法暂时领先

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
If Left(s, 1) <> sreplace Then
    Mid(t, icount, 1) = Left(s, 1)
    icount = icount + 1
End If
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
回复

使用道具 举报

发表于 2012-2-21 18:30 | 显示全部楼层
再整下去有点偏执了
什么是好的代码?个人认为在保证准确的情况下,评价标准依次是易理解、简洁、高效,不能简单问题复杂化,不能为追求一点点效能的提高,不计成本地把代码整得晦涩冗长。
对这么一实际小问题,在真实的编程过程中,不可能给他太大的篇幅,为此9楼的应当就是非常优秀的了(或许还有些许改动,但都是无伤大局的)

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-2-21 19:27 | 显示全部楼层
谢谢上清!

简单问题,复杂解决,的确不应推荐。特别是刚接触VBA时,千万不要这样处理。
学习中,免不了会有些幻想,比如设计纯循环,以努力达到更好效果,对我来说,看到这样代码或能查看到效果,都觉得有趣。同时,可了解到或测试到一些平时注意不到的小细节。82和吕布的方法,更专业,我们一下也学不来,但作为远方的一道亮丽景色,激励我们坚持学习,是很难得的,谢谢82和吕布了!
就像走路,既要脚踏实地,一步步的学习,感到枯燥时,放眼远望下,也是有益的。感谢上清直言相告,非常必要!
回复

使用道具 举报

 楼主| 发表于 2012-2-21 19:32 | 显示全部楼层
上清的回复,虽多是简短,但很注重实效
回复

使用道具 举报

发表于 2012-2-23 13:30 | 显示全部楼层
学习当然要从头学起,这样才能学到东西。
只用最简单功能的函数来做多有成就感啊
而且,各种开销也能控制好
回复

使用道具 举报

发表于 2012-2-23 22:20 | 显示全部楼层
真是长知识啊!!!            
回复

使用道具 举报

发表于 2012-2-24 17:53 | 显示全部楼层
转为以逗号分隔的字符串
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:17 , Processed in 0.775906 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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