今天我們聊一聊“一勺匯”的終極殺手——將符合條件的多個結(jié)果合并到一個單元格內(nèi)的自定義函數(shù):Contxt函數(shù)。
先說下啥是自定義函數(shù),度娘是這么說的:
用戶自定義函數(shù)是指如果要在公式或計算中使用特別復(fù)雜的計算,而工作表函數(shù)又無法滿足需要,則需要創(chuàng)建用戶自定義函數(shù)。這些函數(shù),稱為用戶自定義函數(shù),可以通過使用 Visual Basic for Applications 來創(chuàng)建。
看起來很復(fù)雜的說,其實就是用VBA代碼寫個函數(shù)。
當然嘍,我們今天聊的不是VBA代碼,而是自定義函數(shù)Contxt。——我們不需要知道Contxt的VBA代碼是怎么寫的,只需要知道Contxt是怎么用就好了。
這就好比,我們想吃塊豬肉,還需要去養(yǎng)豬嗎?不需要的,去菜市場買點來炒就好了。
今天我們就是去菜市場,買個Contxt帶回家用用。
還是先來看一道題,如下圖所示,基礎(chǔ)數(shù)據(jù)是某個學(xué)院某些人的性別以及考試成績的信息(數(shù)據(jù)純屬虛擬,如有雷同,那是逆天)。
現(xiàn)在老板發(fā)話咧,讓你統(tǒng)計一份不及格人員的名單,按性別和課類進行統(tǒng)計,統(tǒng)計的結(jié)果每個人名之間以空格間隔,結(jié)果參照下方所示。
——統(tǒng)計你妹,老板你到底懂不懂Excel啊,你這不符合數(shù)據(jù)規(guī)范……,你心里默默的念叨這么一句,然后該干什么還得干什么,苦悶到天亮。
而如果你知道自定義函數(shù)Contxt,則可以瞬間秒殺此類問題。
Contxt函數(shù)的功能其實就是一個高級的連接符,可以快捷將參數(shù)值捏合成一個字符串。除了錯誤值,啥都能接受并處理。
比如:
=Contxt(1,2,3)
得到:123
=Contxt(2013,"應(yīng)用大全","火熱上市啦!")
得到:2013應(yīng)用大全火熱上市啦!
=Contxt(A2:A3&",")
數(shù)組運算后得到:祝洪忠,星光,
以上述圖片問題為例,我們在B13輸入以下數(shù)組公式,按組合鍵結(jié)束輸入,并復(fù)制填充到B13:C14區(qū)域,即可得出最終結(jié)果。
=Contxt(IF(($B$2:$B$9=$A13)*(C$2:C$9<60),$A$2:$A$9&" ",""))
說說這個公式的意思:
IF(($B$2:$B$9=$A13)*(C$2:C$9<60),$A$2:$A$9&" ","")部分,是Contxt需要合并成一個字符串的數(shù)據(jù)。
IF函數(shù)首先判斷B2:B9的值是否等于A13(男),再判斷C2:C9的值是否小于60(不及格),如果兩個條件同時成立,返回A列姓名連接上空格,否則返回假空。
于是得到一個內(nèi)存數(shù)組:
{"";"星光 ";"";"";"";"";"郭輝 ";""}
最后使用Contxt將IF函數(shù)的結(jié)果合并為一個字符串,得到最終結(jié)果:
星光 郭輝
瞧瞧,Contxt處理起“一勺匯”來,是不是很方便?!
上面我們說了Contxt怎么用,下面我們來說下怎么去菜市場買個Contxt帶回家。
1、打開VBE窗口
右鍵單擊任意工作表標簽,在彈出的快捷菜單中選擇【查看代碼】命令。
2、插入模塊
在已打開的VBE窗口中,右鍵單擊【工程資源管理器】任意處,在彈出的快捷菜單中,依次單擊【插入】——【模塊】
3、復(fù)制粘貼代碼
將以下代碼復(fù)制粘貼到已激活模塊的代碼窗口中。
PubliC FunCtion Contxt(ParamArray args() As Variant) As Variant
Dim tmptext As Variant, i As Variant, Cellv As Variant
Dim Cell As Range
tmptext = ""
For i = 0 To UBound(args)
If Not IsMissing(args(i)) Then
SeleCt Case TypeName(args(i))
Case "Range"
For EaCh Cell In args(i)
tmptext = tmptext & Cell
Next Cell
Case "Variant()"
For EaCh Cellv In args(i)
tmptext = tmptext & Cellv
Next Cellv
Case Else
tmptext = tmptext & args(i)
End SeleCt
End If
Next i
ConTxt = tmptext
End FunCtion
如此,我們就成功的將Contxt函數(shù)帶回家了,趕緊打發(fā)它去做點事吧。