本文主要介紹一些小衆函數,包括各種奇形怪狀的函數
let,switch,search,upper,lower,unique,xmatch,getpivotdata,formulatext,isformula,fieldvalue,areas,address,valuetotext,value,t,rmb,rept,numbervalue,even,odd,exact,arraytotext,sequence,sqrt,power,pi,abs,fact,exp,ln,log,type,sign,product
=LET(name1, name_value1, calculation_or_name2, [name_value2, calculation_or_name3...])
LET英文讓的意思,函數會向計算結果配置設定名稱,這樣就可存儲中間計算、值或定義公式中的名稱。
但是這些名稱僅可在 LET函數範圍内使用。
這個函數與程式設計中的變量類似,LET 是通過 Excel 的本機公式文法實作的
若要在 Excel 中使用 LET 函數,需定義名稱/關聯值對,再定義一個使用所有這些項的計算。
必須至少定義一個名稱/值對(變量),LET 最多支援 126 個對。
例:=LET(x,5,x+1) 讓變量x等于5,傳回變量x+1的值
第一個參數是要配置設定的第一個變量名稱,必須以字母開頭,不能是公式的輸出,也不能與範圍文法沖突。本例用x
第二個參數是第一個變量名稱的值,本例指派為5,這個參數可以用公式進行動态引用
第三個參數是計算公式或者第二個變量,如果第三個參數作為最後一個參數,則是計算公式,本例傳回的是計算公式x+1 = 5+1
第三個參數當然還可以作為第二個變量的名稱,如下:我們定義第二個變量名稱y,并指派為2,最後一個參數是計算公式,即x+y = 5+2
問題1:根據總成績傳回分數評級(成績大于等于700為非常優秀,成績大于等于600為優秀,成績大于等于500為普通,成績小于500為一般)
這個問題有一般方法是加個輔助列,用VLOOKUP先把每人的成績比對出來,然後再用IFS判斷,這裡面如果不用輔助列的話,把VLOOKUP公式作為參數寫裡面會很累贅
=IFS(XLOOKUP(L2,A:A,I:I)>=700,"非常優秀",XLOOKUP(L2,A:A,I:I)>=600,"優秀
",XLOOKUP(L2,A:A,I:I)>=500,"普通",XLOOKUP(L2,A:A,I:I)<500,"一般")
這時我們可以用LET函數:此時相當于我們把總成績的查詢結果指派給變量a,然後用邏輯函數對變量a的值進行判斷
=LET(a,XLOOKUP(L2,A:A,I:I),IFS(a>=700,"非常優秀",a=600,"優秀",a>=500,"普通",a<500,"一般"))
SWITCH(表達式, value1, result1, [default 或 value2, result2],…[default 或 value3, result3])
switch英文是轉換的意思,SWITCH 函數根據值清單計算一個值(稱為表達式),并傳回與第一個比對值對應的結果。 如果不比對,則可能傳回可選預設值
這個函數和CHOOSE函數類似,CHOOSE是按序号進行傳回對應的值,這個是按比對傳回對應的值
第一個參數是要進行比較的值,也可以是要轉換的值,比如把日期轉為星期的格式,再進行比對
第二個參數是條件值,如果第一個參數的值等于第二個參數,則返第三個參數
第三個參數是傳回值
還可以進行多條件判斷,如果查不到,我們還可以加一個如果沒有比對到的傳回值,如果不指定此項沒有比對結果時,則會傳回#N/A值
問題2:通過籍貫進行比對傳回,如果是陝西省、山東省傳回北方,如果是湖南省傳回南方:
=SWITCH(XLOOKUP(L2,A:A,D:D),"陝西省","北方","湖南省","南方","山東省","北方")
SEARCH(find_text,within_text,[start_num])search是查找的意思,這個函數與FIND函數類似
第一個參數是要查找的文本
第二個參數是要在其中搜尋第一個參數的值的文本
第三個參數是從第幾個字元開始查找
注意:SEARCH函數不區分大小寫。如果要執行區分大小寫的搜尋,FIND函數區分大小寫
可以在第一個參數中使用通配符問号 (?) 和星号 (*) ,問号比對任意單個字元;星号比對任意一串字元。 如果要查找實際的問号或星号,請在字元前鍵入波形符 (~)
如果找不到 find_text 值,則傳回#VALUE! 錯誤值。
如果省略了 start_num 參數,則假設其值為 1。
總結起來一句話:SEARCH函數功能與FIND函數一樣,不同在于SEARCH支援通配符查找并且不區分大小寫,FIND函數不支援通配符且區分大小寫
問題3:查找技能名稱裡第三個字是劍字的技能:一個問号代表任一一個字元
=SEARCH("??劍?",E2)
UPPER(參數文本)将文本轉換為大寫字母
LOWER(參數文本)将文本轉換為小寫字母
PROPER(參數文本),proper單詞有适當的意思,就是将文本字元串的首字母以及文字中任何非字母字元之後的任何其他字母轉換成大寫,将其餘字母轉換為小寫。
TRANSPOSE(array):transpose英文是轉置的意思,也就是行列互換位置:相當于複制粘貼裡面選擇性粘貼的轉置:
=TRANSPOSE(A1:D2)
問題4:将姓名分數評級區域進行轉置顯示:
=TRANSPOSE(L1:M6)
UNIQUE函數傳回清單或範圍中的一系列唯一值,unique英文單詞是獨一無二的意思:
問題5:傳回部門裡面的唯一值清單,也就是說相同的門派隻傳回第一個出現的值:
=UNIQUE(H2:H20)
=XMATCH (lookup_value、lookup_array、[match_mode]、[search_mode]) xmatch函數是match函數的更新版,類似xlookup相比于vlookup函數一樣
前三個參數和match函數一樣
隻是多了一個第四個參數[search_mode]
指定搜尋類型:
1 - 在預設搜尋 (搜尋)
-1 - 搜尋倒序搜尋 (搜尋) 。
2 - 執行依賴于按升lookup_array排序的二進制 搜尋 。 如果未排序,将傳回無效結果。
2 - 執行依賴于 lookup_array 按降序排序的二進制搜尋。 如果未排序,将傳回無效結果。
問題6:倒序查找姓名序号,也就是從最下面往上查找人名,然後傳回第一個查到的姓名的位置:
如下:=XMATCH(M2,A:A,0,-1)
GETPIVOTDATA,get是擷取,pivot是樞的意思,我們可以把pivot了解為是透視表的意思就行,data是資料,該函數傳回資料透視表中的可見資料,例;我們将成績表進行透視,取部門、籍貫、總成績三個字段,在E1單元格直接等于用滑鼠點總計那個單元格,得到如下公式;
=GETPIVOTDATA("總成績",$A$1)
第一個參數是要取值的資料區域,第二個參數按參數指南上的意思應該是透視表名稱,不過我們發現這個參數都是透視表的最左上角單元格絕對引用,
如果想看華山派的總成績,則将A列華山派進行折疊,後等于C6單元格即可
=GETPIVOTDATA("總成績",$A$1,"部門","華山派")
此時公式參數,多了1個篩選條件,即部門
如果再往下鑽:選陝西省
=GETPIVOTDATA("總成績",$A$1,"部門","華山派","籍貫","陝西省")
注意這個公式不能下拉,如果想在右邊引用一列相同資料,可以選擇複制粘貼純數值的格式或者用單元格引用的形式:如下在E1單元格輸入 =C1向下即可
FORMULATEXT(reference) formula是公式的意思,此函數以字元串的形式傳回公式
=FORMULATEXT(M2)
這個函數可以了解為選擇公式功能 - 顯示公式的結果
此時M單元格都變成公式文本格式顯示了
=ISFORMULA(M2)判斷是否為公式,傳回邏輯值
可以使用FIELDVALUE函數從股票或地理位置資料類型等連結資料類型中檢索字段資料。
=AREAS((L1:M6,M1:M6))傳回參數裡面的區域個數(相連部分視為一個區域)
ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])根據指定行号和列号獲得工作表中的某個單元格的位址=ADDRESS(1,1)
=ADDRESS(1,1,1,1,"花名冊")
valuetotext()函數可以将其他格式的值轉為文本格式,如下:
=VALUE(O2) 将表示數字的文本字元串轉換為數字,與上面的函數用法正好相反
T()函數表示如果是文本值,則傳回值,如果不是文本值,則傳回為空(注意雖然傳回值為空,但是該單元格并不是空,用ISBLANK函數可以判斷裡面是有内容的)
=RMB(L2,2)将數字格式轉為帶貨币符号的文本
REPT(text, number_times)rept是單詞repeat的縮寫,是重複的意思,函如其名表示将文本重複一定次數,使用REPT 來在單元格中填充文本字元串的大量執行個體
第一個參數是要重複的文本
第二個參數Number_times表示用于指定文本重複次數的正數
例:輸入=REPT("我喜歡你",ROW()),下拉單元格會形成一個向下的三角形
NUMBERVALUE(Text, [Decimal_separator], [Group_separator ])
将以文本格式顯示的數值傳回為以數值格式,這個函數主要可以解決帶千分位的數值文本,例如跨境電商裡面亞馬遜歐洲站資料導出後的原始文本,
第一個參數是要轉換為數字的文本。
第二個參數是小數分隔符Decimal_separator可選。 用于分隔結果的整數和小數部分的字元。
這個函數會将第一個文本參數中的空格(即使位于參數中間)也将被忽略。
例如,“ 3 000 ”将傳回3000
第三個參建Group_separator是用于分隔數字分組的字元,例如千分位,百萬分位符号
=NUMBERVALUE(A2,",")
可以看到除了第三個數字無法轉換,其他的都完成,第三個需要先把不是負号的橫杠替換掉,再進行轉換
或者這個問題,可以全部用文本替換的形式,利用power query裡面的功能,進行三次替換,最後再轉為數字格式,這種方法相對比較友善,一勞永逸,不用每次都要進行好幾次替換
EXACT函數,判斷兩個文本是否相等,這個函數直接用=号就可以實作
ARRAYTOTEXT 函數傳回任意指定區域内的文本值的數組,也就是将一個矩陣區域轉為一個單元格的數組
ARRAYTOTEXT(array, [format])
第一個參數是待轉換區域,
第二個參數是指定格式:
0 預設。 易于閱讀的簡明格式。 傳回的文本将與應用了正常格式的單元格中呈現的文本相同。
1 包含轉義字元和行定界符的嚴格格式。 生成一條可在輸入編輯欄時被解析的字元串, 将傳回的字元串(布爾值、數字和錯誤除外)封裝在引号中。
例=ARRAYTOTEXT(成績單,1),将整個成績表轉換到一個單元格裡的數組格式
=PI()圓周率函數,傳回pai的值
=SQRT(25)平方根函數,sqrt是單詞square root的縮寫
=POWER(2,10)幂函數,power英文有幂、乘方的意思
可以用power函數進行求多次方根:例:求1024的十次方根:
=POWER(1024,1/10)
=FACT(5)階乘函數
=EXP(1)傳回自然對數函數的底數e的N次方
=LN(A1)以自然對數底數e的對數
TYPE(value)傳回數值的類型
1代表數值
2代表文本
4代表邏輯值
16代表誤內插補點
64代表數組
128代表複合資料
=SIGN(A1)傳回參數的正負值,正數傳回1,負數傳回-1,0傳回0
=LOG(4,2)傳回對數函數的值(以2為底數,求4的對數)第二個參數忽略則預設為10
=PRODUCT(A1:A5)計算所有參數的乘積