ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 作品分享:批量剔除空格

作品分享:批量剔除空格

作者:绿色风 分类: 时间:2022-08-18 浏览:70
楼主
little-key
代码如下:
  1. Sub 批量剔除空格()    '批量剔除空格,可以是区域,也可以是单列或者多列
  2.     On Error Resume Next
  3.     Application.ScreenUpdating = False
  4.     Dim n As Long, i As Long, arr, t As Single, q
  5.     If Selection.Count = 1 Then MsgBox "您只选择了一个单元格,太 Easy 了" & vbCrLf & "请自行手动删除。", 48 + vbOKOnly, "警示": Exit Sub
  6.     ans = Application.InputBox("请选择剔除全部、左边还是右边。" & Chr(10) & "1:剔除全部空格;" & Chr(10) & "2:剔除左边空格。" & Chr(10) & "3:剔除右边空格。", "剔除方式", 1, 100, 100, , , 1)
  7.     If ans = False Then Exit Sub
  8.     t = Timer
  9.     PG = Selection.Cells(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)  '定义选区第一个单元格的地址
  10.     y = Selection.Rows.Count  '定义选区的行数
  11.     ph = Selection.Columns.Count     '定义选区列数
  12.     Pl = Selection.Column  '定义选区第一类的列标
  13.     q = Columns(1).Rows.Count   '判断是07格式还是非07格式,若为07格式,则q=1048576,否则为65536
  14.     Select Case ans
  15.     Case 1    '剔除全部空格
  16.         For k = 1 To ph   '以循环执行剔除空格的模式执行
  17.             '+++++++++++核心部分(S)+++++++++++
  18.             n = WorksheetFunction.Min(Cells(q, Pl + k - 1).End(xlUp).Row, y)
  19.             arr = Range(PG).Offset(0, k - 1).Resize(n, 1)
  20.             With CreateObject("scripting.dictionary")    '建立字典
  21.                 For i = 1 To n
  22.                     .add i, Trim(arr(i, 1))    '顺序建立字典内容
  23.                 Next
  24.                 arrk = Range(PG).Offset(0, k - 1).Resize(n, 1)
  25.                 For i = 1 To UBound(arr)
  26.                     arr(i, 1) = .item(i)   '在字典中按key取item
  27.                 Next
  28.             End With
  29.             Range(PG).Offset(0, k - 1).Resize(UBound(arr), 1) = arr
  30.             '+++++++++++核心部分(E)+++++++++++
  31.         Next k

  32.         Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
  33.                           SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
  34.                           ReplaceFormat:=False

  35.     Case 2  '剔除左边空格
  36.         For k = 1 To ph   '以循环执行剔除空格的模式执行
  37.             '+++++++++++核心部分(S)+++++++++++
  38.             n = WorksheetFunction.Min(Cells(q, Pl + k - 1).End(xlUp).Row, y)
  39.             arr = Range(PG).Offset(0, k - 1).Resize(n, 1)
  40.             With CreateObject("scripting.dictionary")    '建立字典
  41.                 For i = 1 To n
  42.                     .add i, LTrim(arr(i, 1))    '顺序建立字典内容
  43.                 Next
  44.                 arrk = Range(PG).Offset(0, k - 1).Resize(n, 1)
  45.                 For i = 1 To UBound(arr)
  46.                     arr(i, 1) = .item(i)   '在字典中按key取item
  47.                 Next
  48.             End With
  49.             Range(PG).Offset(0, k - 1).Resize(UBound(arr), 1) = arr
  50.             '+++++++++++核心部分(E)+++++++++++
  51.         Next k
  52.     Case 3    '剔除右边
  53.         For k = 1 To ph   '以循环执行剔除空格的模式执行
  54.             '+++++++++++核心部分(S)+++++++++++
  55.             n = WorksheetFunction.Min(Cells(q, Pl + k - 1).End(xlUp).Row, y)
  56.             arr = Range(PG).Offset(0, k - 1).Resize(n, 1)
  57.             With CreateObject("scripting.dictionary")    '建立字典
  58.                 For i = 1 To n
  59.                     .add i, RTrim(arr(i, 1))    '顺序建立字典内容
  60.                 Next
  61.                 arrk = Range(PG).Offset(0, k - 1).Resize(n, 1)
  62.                 For i = 1 To UBound(arr)
  63.                     arr(i, 1) = .item(i)   '在字典中按key取item
  64.                 Next
  65.             End With
  66.             Range(PG).Offset(0, k - 1).Resize(UBound(arr), 1) = arr
  67.             '+++++++++++核心部分(E)+++++++++++
  68.         Next k
  69.     End Select
  70.     Application.ScreenUpdating = True
  71.     MsgBox "替换完毕" & vbCrLf & "用时共计 " & Timer - t & " 秒!", 64 + vbOKOnly, "友情提示"    '速度还可以
  72. End Sub
速度还算可以,以前问过很多人,后来自己使用字典开发,提高了速度,只是还是比较繁琐。
2楼
laoyebin
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
这句我这边说语法错误,不知道怎么回事

直接cells.Replace " ","" 不行么?
3楼
little-key
cells.Replace " ",""
这句代码说的是全部替换,在本次代码中不用这个,是考虑部分有意义的空格,因此选择使用Selection.Replace ,即选择的才替换。
4楼
laoyebin
那就selection.Replace " ",""
5楼
little-key
可以用这个附件试试。
Book2.rar
6楼
laoyebin
TRIM并不能去除全部的,试试这个附件
Book2.rar

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap