博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VBA+正则表达式解决订单小问题
阅读量:7121 次
发布时间:2019-06-28

本文共 1186 字,大约阅读时间需要 3 分钟。

由于我经常要整理订单,剪切,粘贴很麻烦,特别是单子一多,总感觉事倍功半。

由于有VBA这个神器,我想试着去解决这个问题。

分析问题

平常我从网站上得到的数据是这样的。

我每次要把他变为以下这样的。

那么我一个单差不多有三个动作

  1. 选中名字剪切,到对应的名字那一列粘贴
  2. 选中手机号码剪切,到对应的手机号码那一列粘贴
  3. 删除两个逗号

单子一多会令我很难受,于是我开始认真分析,企图找到其中的解决方法。

我的思路是这样的

  1. 拿到每一列的字符串,然后观察规律,是这样的

地址+逗号+空格+名字+逗号+空格+11位手机号码

  1. 得到手机号码

"\s\d{11}" '匹配空格+11位手机号码

  1. 类似的得到名字,这里不多说
  2. 本身那一列要删除掉包括第一个逗号之后的所有字符,匹配到要删除的然后用空代替即可。

代码

Dim mycolumns '表示某一列的行数Dim a As StringDim x As String, name As String, tel As StringDim regex As Object, telsum, teldigit, namesum, namedigitmycolumns = [F65536].End(xlUp).Row '这一列的行数For i = 2 To mycolumns '循环从第二行到最后有效的最后一行a = Range("F" & i) '得到目前的字符串With CreateObject("vbscript.regexp")    .Global = True    .Pattern = "\s\d{11}" '匹配空格+手机号码    Set telsum = .Execute(a) '得到手机号码    tel = ""    For Each teldigit In telsum        tel = tel & teldigit    Next    .Pattern = "\,\s[\u4e00-\u9fa5]+"    Set namesum = .Execute(a)    name = ""    For Each namedigit In namesum        name = name & namedigit    name = Mid(name, 3, 6)    Range("A" & i) = name    Range("B" & i) = tel    .Pattern = "\,\s[\u4e00-\u9fa5]+\,\s\d{11}"    a = .Replace(a, "")    Range("F" & i) = a    NextEnd WithNext复制代码

转载于:https://juejin.im/post/5a33b3fff265da43052eaf0f

你可能感兴趣的文章
每天一个linux命令(5):in命令
查看>>
基类和派生类
查看>>
PostgreSql Lock锁
查看>>
html5游戏引擎
查看>>
leetcode 29. Divide Two Integers
查看>>
Mobius反演定理-BZOJ2154
查看>>
InOrder Tree(Binary List Tree)
查看>>
三种背包问题
查看>>
第四十九篇、跳转设置界面
查看>>
MATLAB脚本显示滤波器系数
查看>>
day19<异常&File类>
查看>>
JAVASCRIPT 基本数据类型
查看>>
《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)
查看>>
Memcached(四)Memcached的CAS协议
查看>>
python 多进程multiprocessing 模块
查看>>
初步学习Django-第一篇:创建项目
查看>>
SpringBoot系列六:SpringBoot整合Tomcat
查看>>
SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)...
查看>>
根据id来实现小程序tab切换,
查看>>
003——数组(三)count()reset()end()prev()next()current()
查看>>