賭5毛錢的,你肯定從不知道提取字元如此輕鬆
先來看看一個表,也不知道哪個挨千刀的,在記錄數據的時候搞成這個樣子,都聚集在A1單元格。要將A1中的姓名和銀行卡號分別提取出來,只需要一個自定義函數GetChar就可以輕鬆搞定。
C2單元格:=INDEX(GetChar($A$1,3),ROW(1:1))
D2單元格:=INDEX(GetChar($A$1,1),ROW(1:1))
銀行卡號可以搞定,身份證號也很容易,還是這個挨千刀的記錄員,把姓名和身份證號都登記在了A1單元格,有沒有一種想動刀子的衝動?再次請出自定義函數GetChar:
C2單元格:=INDEX(GetChar($A$1,3),ROW(1:1))
D2單元格:=LEFT(INDEX(GetChar($A$1,1),ROW(1:1))&"X",18)
那麼這個神秘的GetChar到底是什麼呢?
再和你賭5毛錢的,你現在的電腦里寫完這個公式之後,你得到的結果是:#NAME?
它是來源於我獨創的VBA自定義函數,在你的VBA模塊中植入以下代碼,來吧,和我一起輕鬆玩轉提取字元:
Function GetChar(strChar AsString, varType As Variant) 取值函數
Dim objRegExp As Object
Dim objMatch As Object
Dim strPattern As String
Dim arr
Set objRegExp =CreateObject("vbscript.regexp")
varType = LCase(varType)
Select Case varType
Case 1, "number"
strPattern ="-?d+(.d+)?"
Case 2, "english"
strPattern = "[a-z]+"
Case 3, "chinese"
strPattern ="[u4e00-u9fa5]+"
End Select
With objRegExp
.Global = True
.IgnoreCase = True
.Pattern = strPattern
Set objMatch = .Execute(strChar)
End With
If objMatch.Count = 0 Then
GetChar = ""
Exit Function
End If
ReDim arr(0 To objMatch.Count - 1)
For Each cell In objMatch
arr(i) = objMatch(i)
i = i + 1
Next
GetChar = arr
Set objRegExp = Nothing
Set objMatch = Nothing
End Function
它的功能設計就是專門為提取字元的,語法為:GetChar(strChar,varType):
varType參數為1時,提取:數字
varType參數為2時,提取:英文
varType參數為1時,提取:漢字
再來用GetChar來計算銷售金額,在B2輸入數組公式:
=PRODUCT(--(GetChar(A2,1)))
不知道你輸了多少錢給我?
更多函數精彩盡在《函數100例》第11期課程,每周日上午開課,通過100個實戰案例,講解70個函數在工作中的應用。帶你5分鐘完成月報統計。
函數課程2017年終大促,現在同時報名《Excel函數實戰技巧精粹》第20期和《Excel函數實戰100例》第11期兩門課,更可享受兩課各減50元的優惠。


※拆分同一單元格中的姓名,原來這麼簡單啊!
※VBA常用小代碼201:批量獲取指定文件夾下文件名
※崇尚科學,破除迷信——將LOOKUP推下神壇
※被我忽略多年的功能,想不到還挺厲害
※Excel表中批量導入照片,這個方法挺管用!
TAG:Excel之家ExcelHome |