Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 27414|回复: 20

vba 如何利用trim将文本中间的多余空格去掉

[复制链接]
发表于 2014-1-22 19:53 | 显示全部楼层 |阅读模式
trim独立公式仅仅能替换首尾的空格,现想去掉多余的。

注:是去掉多余,保留1个空格,不能用replace。


比如 “1      2”,变成“1 2”

发表于 2014-1-22 20:06 | 显示全部楼层
回复

使用道具 举报

发表于 2014-1-22 20:19 | 显示全部楼层
s$ = "1111      222"
MsgBox Left(s, InStr(s, " ")) & Trim(Mid(s, InStr(s, " ")))
MsgBox Left(s, InStr(s, " ")) & Mid(s, InStrRev(s, " ") + 1)
etc.
回复

使用道具 举报

 楼主| 发表于 2014-1-22 22:06 | 显示全部楼层
上清宫主 发表于 2014-1-22 20:19
s$ = "1111      222"
MsgBox Left(s, InStr(s, " ")) & Trim(Mid(s, InStr(s, " ")))
MsgBox Left(s, In ...

谢谢,
可是如果 1111   22     2   333“类似的就不行了。
如果在VBA中的trim同excel公式的应用一样?谢谢

回复

使用道具 举报

发表于 2014-1-23 09:17 | 显示全部楼层
蜂蜜柚子 发表于 2014-1-22 22:06
谢谢,
可是如果 1111   22     2   333“类似的就不行了。
如果在VBA中的trim同excel公式的应用一样? ...

借用上清宫主原理做个自定义函数,楼主测试是否符合要求
  1. Function TrimPlus(str As String) As String
  2.     Dim str1$, str2$, n
  3.     Do
  4.         n = InStr(str, " ")
  5.         If n > 0 Then
  6.             str1 = Left(str, n)
  7.             str = Trim(Mid(str, n))
  8.             str2 = str2 & str1
  9.         End If
  10.     Loop Until n = 0
  11.     TrimPlus = str2 & str
  12. End Function
复制代码
回复

使用道具 举报

发表于 2014-1-23 09:25 | 显示全部楼层
本帖最后由 雪舞子 于 2014-1-23 10:10 编辑

进一步修正,首位不留空及去掉中文空格
  1. Function TrimPlus(str As String) As String
  2.     Dim str1 As String, str2 As String, n As Integer
  3.     str = Trim(Replace(str, " ", ""))
  4.     Do
  5.         n = InStr(str, " ")
  6.         If n > 0 Then
  7.             str1 = Left(str, n)
  8.             str = Trim(Mid(str, n))
  9.             str2 = str2 & str1
  10.         End If
  11.     Loop Until n = 0
  12.     TrimPlus = str2 & str
  13. End Function
复制代码
回复

使用道具 举报

发表于 2014-1-23 09:50 | 显示全部楼层
直接调用工作表函数trim不是更方便吗?
VBA函数trim只会删除文本的前导和尾随空格,对文本中间的多余空格无能为力,但EXCEL工作表函数trim不仅会删除文本的前导和尾随空格,还会删除文本中间的多余空格只保留一个。
worksheetfunction.trim()  即可完美解决
回复

使用道具 举报

发表于 2014-1-23 10:48 | 显示全部楼层
fffox 发表于 2014-1-23 09:50
直接调用工作表函数trim不是更方便吗?
VBA函数trim只会删除文本的前导和尾随空格,对文本中间的多余空格无 ...

高!
可见,熟悉函数是多么重要哟
回复

使用道具 举报

发表于 2014-1-23 11:48 | 显示全部楼层
fffox 发表于 2014-1-23 09:50
直接调用工作表函数trim不是更方便吗?
VBA函数trim只会删除文本的前导和尾随空格,对文本中间的多余空格无 ...

正解。

看到前面回帖那么努力,我都被笑惨了……
回复

使用道具 举报

发表于 2014-1-23 11:50 | 显示全部楼层
上清宫主 发表于 2014-1-23 10:48
高!
可见,熟悉函数是多么重要哟

这根本没啥……

只能怪你自己知识面不够……


这也是这里比EH 水平低的原因之一。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 06:41 , Processed in 0.317854 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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