论文部分内容阅读
表姐前来求助,Excel工作表大都是类似于“正品现货Emporio Armani 阿玛尼男士修身长袖打底T恤111023 3A515-tmall.hk天猫国际”的商品名称(如图1),现在希望将两边中文字符之间的英文品牌名称“Emporio Armani”提取出来,由于这些商品名称几乎不具备统一的规律,因此无法采取分列的方法,如果纯粹采取手工操作的方法,工作量相当之大,而且容易出错。有没有简单一些的方法呢?
初步解决方案:由于使用的是Excel 2013,因此首先考虑的是快速填充功能,在B2单元格手工输入“Emporio Armani”,选中B2:B184单元格区域,切换到“数据”选项卡,单击“数据工具”功能组的“快速填充”按钮,可以获得如图2所示的结果。遗憾的是虽然已经省去不少工作量,但仍然需要进行相应的手工修改,可以说这种方法并不完美。
VBA代码完美解决:根据表姐的需求,考虑VBA代码,经过反复尝试、修改,建议她使用如下代码:
Public Sub abc()
Dim ar, i
ar = Range([a2], [a65536].End(3))
With CreateObject("vbscript.regexp")
.Global = True
For i = 1 To UBound(ar)
.Pattern = "^[\u4e00-\u9fa5]{0,}([^\u4e00-\u9fa5]+)[\u4e00-\u9fa5]+.+$"
ar(i, 1) = Trim(.Replace(ar(i, 1), "$1"))
.Pattern = " \D{1,3}$| \d+$"
ar(i, 1) = .Replace(ar(i, 1), "")
Next
End With
[b2].Resize(UBound(ar)) = ar
[b:b].Replace ";*", "", 2
End Sub
按下“Alt+F11”组合键,打开Microsoft Visual Basic编辑器窗口,选择“插入/模块”,在右侧窗格插入一个空白模块,输入或粘贴代码(也可以从http://pan.baidu.com/s/1kTLpG7X下载代码文件),检查无误之后,选择“文件/关闭并返回到Microsoft Excel”命令,返回Excel主界面,按下“Alt+F8”组合键,打开“宏”对话框,运行宏即可。
初步解决方案:由于使用的是Excel 2013,因此首先考虑的是快速填充功能,在B2单元格手工输入“Emporio Armani”,选中B2:B184单元格区域,切换到“数据”选项卡,单击“数据工具”功能组的“快速填充”按钮,可以获得如图2所示的结果。遗憾的是虽然已经省去不少工作量,但仍然需要进行相应的手工修改,可以说这种方法并不完美。
VBA代码完美解决:根据表姐的需求,考虑VBA代码,经过反复尝试、修改,建议她使用如下代码:
Public Sub abc()
Dim ar, i
ar = Range([a2], [a65536].End(3))
With CreateObject("vbscript.regexp")
.Global = True
For i = 1 To UBound(ar)
.Pattern = "^[\u4e00-\u9fa5]{0,}([^\u4e00-\u9fa5]+)[\u4e00-\u9fa5]+.+$"
ar(i, 1) = Trim(.Replace(ar(i, 1), "$1"))
.Pattern = " \D{1,3}$| \d+$"
ar(i, 1) = .Replace(ar(i, 1), "")
Next
End With
[b2].Resize(UBound(ar)) = ar
[b:b].Replace ";*", "", 2
End Sub
按下“Alt+F11”组合键,打开Microsoft Visual Basic编辑器窗口,选择“插入/模块”,在右侧窗格插入一个空白模块,输入或粘贴代码(也可以从http://pan.baidu.com/s/1kTLpG7X下载代码文件),检查无误之后,选择“文件/关闭并返回到Microsoft Excel”命令,返回Excel主界面,按下“Alt+F8”组合键,打开“宏”对话框,运行宏即可。