王臨
表姐前來求助,Excel工作表大都是類似于“正品現(xiàn)貨Emporio Armani 阿瑪尼男士修身長袖打底T恤111023 3A515-tmall.hk天貓國際”的商品名稱(如圖1),現(xiàn)在希望將兩邊中文字符之間的英文品牌名稱“Emporio Armani”提取出來,由于這些商品名稱幾乎不具備統(tǒng)一的規(guī)律,因此無法采取分列的方法,如果純粹采取手工操作的方法,工作量相當之大,而且容易出錯。有沒有簡單一些的方法呢?
初步解決方案:由于使用的是Excel 2013,因此首先考慮的是快速填充功能,在B2單元格手工輸入“Emporio Armani”,選中B2:B184單元格區(qū)域,切換到“數(shù)據(jù)”選項卡,單擊“數(shù)據(jù)工具”功能組的“快速填充”按鈕,可以獲得如圖2所示的結果。遺憾的是雖然已經(jīng)省去不少工作量,但仍然需要進行相應的手工修改,可以說這種方法并不完美。
VBA代碼完美解決:根據(jù)表姐的需求,考慮VBA代碼,經(jīng)過反復嘗試、修改,建議她使用如下代碼:
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”組合鍵,打開“宏”對話框,運行宏即可。