Chapter 12. 函式 (七):自定義函式12.1 LET

12.1 LET


本章示範檔案:Chapter 12. 函式 (七):自定義函式
本節將介紹 LET、已命名函式、LAMBDA 三個功能,主要是用來命名重複出現的變數與公式,增加變數與函式的可讀性。本章會用到許多前面介紹過的函式,因此若對前面幾章內容還不熟的同學可以在用到相關函式時回去複習其用法。

LET 適用於需要將某一個項目在同一個公式中反覆使用時,函式說明如下:

語法

LET (變數_1, 值運算式_1, [變數_2, 值運算式_2,...], 公式運算式)

輸入

  • 變數_n:要用於之後 值運算式_n 或 公式運算式 的名稱,其名稱相關規定如下:
    • 不能是 A1 Notation,例如 A1、A2。
    • 不得包含空格或特殊字元,點號、底線除外。
    • 不得以數字開頭,例如 3times。
    • 可以使用中文。
  • 值運算式_n:要代表 變數_n 的公式,可以用先前已命名過的 變數_1 ~ 變數_n-1 。
  • 公式運算式:要計算的公式,可使用前面所有的 變數_n

輸出

公式運算式 搭配所有 變數_n 的計算結果。

上述的函式說明可能有點抽象,以下使用兩個先前章節的範例作為說明:

  1. 第 1.3 節的範例 C.& D. ,根據會員的生日輸出會員的年齡區間包括 30 歲以下、31~40 歲、41~50 歲、51~60 歲、61 歲以上,如下圖

    公式

    C2 的公式為 =ARRAYFORMULA(LET(年齡,DATEDIF(B2:B,TODAY(),"Y"),
    IFS(年齡<=30,"30 歲以下",年齡<=40,"31~40 歲",年齡<=50,"41~50 歲",年齡<=60,"51~60 歲",年齡>60,"61 歲以上")))

    解說

    • 第 1.3 節中,先使用 =DATEDIF(B2,TODAY(),"Y") 在 J2 計算出每一個會員的年齡,再使用 =IFS(J2<=30,"30 歲以下",J2<=40,"31~40 歲",J2<=50,"41~50 歲",J2<=60,"51~60 歲",J2>60,"61 歲以上") 輸出年齡區間。
    • 在此範例中,要直接輸出年齡區間,可以將前面 IFS 的 J2 全部 DATEDIF 的函式,但這樣公式會變得十分冗長,因此在此就可以使用 LET 將 DATEDIF(...) 設為 變數 年齡,並用於 公式運算式 中。
    • 使用 ARRAYFORMULA 將 B2:B 一次使用 DATEDIF。

  1. 第 9.3 節的範例 D. ptt看板範例 的人氣 (即 2607) 取代為 XXX

    公式

    =LET(人氣起始位置,FIND(" ",ptt看板範例)+1,人氣的長度,FIND(" ",ptt看板範例,人氣起始位置)-人氣起始位置,REPLACE(ptt看板範例,人氣起始位置,人氣的長度,"XXX"))

    解說

    • 第 9.3 節中有說明到可以使用 REPLACE(ptt看板範例,人氣起始位置,人氣的長度,"XXX") 完成,在此可使用 LET 將其作為 公式運算式
    • 人氣起始位置:如第 9.3 節所述,可使用 FIND(" ",ptt看板範例)+1
    • 人氣的長度:如第 9.3 節所述,可使用 FIND(" ",ptt看板範例,FIND(" ",ptt看板範例)+1)-FIND(" ",ptt看板範例)-1,但在此可以使用 人氣起始位置 取代 FIND(" ",ptt看板範例)+1,因此可寫成 FIND(" ",ptt看板範例,人氣起始位置)-人氣起始位置
    • 後面命名的變數可以用到前面命名的變數,所以在此不能將兩個變數對調,因為 人氣的長度 會用到 人氣起始位置

    由以上範例可知,是否使用 LET 對於公式本身的輸出沒有影響,但若公式需要重複用到某個計算項目時,使用 LET 可以讓公式看起來更直觀易懂!