技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 軟件教程 > Excel教程 >

如何使用Contxt自定義函數(shù)

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-02-04 00:00┆點擊:

  今天我們聊一聊“一勺匯”的終極殺手——將符合條件的多個結(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ù)純屬虛擬,如有雷同,那是逆天)。

如何使用Contxt自定義函數(shù)   三聯(lián)

  現(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窗口

  右鍵單擊任意工作表標簽,在彈出的快捷菜單中選擇【查看代碼】命令。

Contxt自定義函數(shù)的用法

  2、插入模塊

  在已打開的VBE窗口中,右鍵單擊【工程資源管理器】任意處,在彈出的快捷菜單中,依次單擊【插入】——【模塊】

Contxt自定義函數(shù)的用法

  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ù)的用法

  如此,我們就成功的將Contxt函數(shù)帶回家了,趕緊打發(fā)它去做點事吧。