VBA代码删除字符串里所有空格(邮件地址内空格专杀!)

通过简单的问卷APP收上来的Email地址内夹杂大量的空格、中文符号,一进入和发件相关的工作环节就想杀人有没有?

为了解决这个痛苦,今天研究出了一个组合使用 双重DoWhile循环 + 文本函数 组合消除字符串内部空格的小代码段供其他和我一样挣扎在一线的朋友们参考。代码比较6的请直接去最下方搬运拙作,我的注释写得及其详细,但凡有基础都能很快看懂。刚入门的朋友请先听我介绍以下思路。

带人犯!这是一个典型的加在空格的email地址:Abc 12 @ nju .edu. cn 一个短短的地址夹了5个空格,简直丧心病狂……

这个有问题的地址有两个处理难点:

  1. 空格不在字符串的两端而在中间,因此不能用简单的trim函数(无论是VBA还是Excel公式)解决
  2. 空格不止一个,网上有不少代码试图用replace的方法替换掉空格,但是很多都是挖了个坑,说明replace最起码在代码实现上不够直观,很多人用不好

针对这两个问题我的思路是:

  1. 对于在中间的空格,可以先用InStr()方法锁定空格所在位置,然后把字符串从空格处劈成两半,对两半分别进行Trim()去空格——这样一来就把从中间去空格的问题转化成了常规的从两边去空格。随后再把这两半拼接起来即可。
  2. 由于邮件地址里面夹杂的地址不止一个,需要用DoWhile循环,再检查一次去过空格的字符串看是不是干净了,如果还包含空格就再来一遍……直到当前处理的字符串里再也没有任何空格。

把这个思路落实到代码里就是:

Sub Space_Killer()

    Dim ridx As Long ' 定义变量存储行标
    Dim w As Worksheet
    Dim org_email ' 定义变量存储经两端去空格的原始邮件地址
    Dim space ' 定义变量存储字符串中空格所在位置,即它的下标
    Dim L_part ' 定义变量存储空格左边的字符串
    Dim R_part ' 定义变量存储空格右边的字符串
    Dim Re_Concatenated ' 定义变量存储重组后的邮件地址
    
    Set w = ThisWorkbook.Worksheets("清理邮箱") '目标工作表的名字叫“清理邮箱”
    ridx = 3 '我要清理的内容是从“清理邮箱”工作表的第3行第5列开始的,因此ridx起始值为3,下面的所有列标也都是5
    
    Do While w.Cells(ridx, 5) <> ""
        org_email = VBA.Trim(w.Cells(ridx, 5)) '清理内部空格之前先把两端的去了
        
        Do While VBA.InStr(w.Cells(ridx, 5), " ") <> 0 '找不到才会等于0,找得到就不等于零
        	debug.Print org_email
            space = VBA.InStr(w.Cells(ridx, 5), " ") '找到现行字符串内空格的下标
            L_part = VBA.Trim(VBA.Left(w.Cells(ridx, 5), space)) '空格左边的截出来
            R_part = VBA.Trim(VBA.Right(w.Cells(ridx, 5), VBA.Len(w.Cells(ridx, 5)) - space)) '空格右边的部分截出来
            Re_Concatenated = L_part & R_part '把截好去了空格的两部分再重新对起来
            Debug.Print Re_Concatenated ’配合前面一次debug.print那些地址中间加在一个甚至多个空格的单元格内容就会在VBE立即窗口里面一一现身,并把空格随着循环数减少的过程展示出来,个人比较喜欢欣赏……
            w.Cells(ridx, 5) = Re_Concatenated '把对起来的重新写入单元格
            Rem 如果字符串里面还有空格,那么下一轮循环的时候就会触发InStr()<> 0条件从而再去一遍
        Loop
        ridx = ridx + 1 '这个不要忘,忘了的话一个有空格的单元格就能让你EXCEL无响应
     
    Loop
    
End Sub

珍爱生命,远离手残者的伤害从清空格开始!

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

哈拉鱼先生

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值