當前位置: 妍妍網 > 辦公

Excel新函式MAP,如何使用?有何意義?

2024-04-17辦公

文 前 推 薦


LAMBDA遞迴運算

坐字法尋找合並單元格

REDUCE函式用法

連續數統計就用FREQUENCY

編按:

如何使用MAP函式?MAP函式有何實際意義?本篇教程為大家解惑。

今天小窩向大家分享MAP函式的用法。MAP函式同樣需要巢狀LAMBDA函式使用。

1. 作用與語法

MAP函式依次將陣列的每個值代入LAMBDA函式中進行運算並以陣列的形式輸出各自的結果。MAP在此處不是地圖,而是對映:將陣列各值運算後的結果按其原來位置關系對映成新陣列。

=MAP(陣列,LAMBDA運算式)

陣列,要參與運算的陣列,可以有多個陣列。

LAMBDA運算式,是最後一個參數,其變量的多少取決於陣列的多少。譬如一個陣列,則LAMBDA只有一個變量;兩個陣列,LAMBDA就有兩個變量。

2. 基本用法

1)單個陣列運算

譬如求每個數據的平方,公式=MAP(B13:B18,LAMBDA(x,x^2))

再譬如求數據的累加和,公式=MAP(B23:B28,LAMBDA(x,SUM(B23:x)))

說明:

陣列中各數據參與運算包含兩種:既可以是陣列中的各值參與運算,也可以是陣列中各單元格參與運算。當前的累加和,X代表的就是單元格參照而非具體的值。

2)多個陣列運算

譬如求兩列數的和,公式=MAP(A33:A38,B33:B38,LAMBDA(x,y,x+y))

說明:

多個陣列運算,各陣列的大小須一致,譬如當前A33:A38和B33:B38都是6行1列的陣列。

如果運算的陣列大小不一致,缺少項將出現#N/A錯誤,譬如=MAP(A33:A38,B33:B37,LAMBDA(x,y,x+y)):

3)LAMBDA運算的每次結果須是單個值而不是陣列

譬如求下列數據分別加10和5的和,公式=MAP(B43:B48,LAMBDA(x,x+{10,5}))得不到正確結果:

說明:

MAP會輸出由每個X的結果組成的陣列,而當前每個X的結果都是一個陣列(X+{10,5}會得到一個陣列而不是一個數),這就成了巢狀陣列。因為Excel函式不支持巢狀陣列,所以結果是#CALC!錯誤。

3. MAP有何意義?

到這裏,想必大家對MAP的用法有了清楚的認識,同時會浮現一個疑惑:MAP有用嗎?

每個數據加10,直接陣列運算更簡便:

每個數據的平方,同樣陣列運算很簡便:

求累計和,也有簡短公式=SUM($B$23:B23):

甚至MAP函式不支持的巢狀陣列,也可以直接運算,=B43:B48+{10,5}:

諸如以上,用MAP函式,不但公式長,還有限制條件,為何還需要MAP函式呢?

(1)有很多函式是聚合類的,只輸出單個值而無法得到陣列,如SUM、MAX、COUNT、AND等;對這類函式,如果要輸出陣列,就需要MAP;

(2)MAP函式可以只寫一個公式就完成整列數據處理,而不再需要公式的下拉填充;

(3)當需要原陣列各自用同一算式計算後再分別代入另一個算式中計算時,用MAP就不用建立輔助列。

譬如,求下方各行數據的最大值。使用MAX函式公式得到B53:C53的最大值,然後向下填充得到其他行的最大值。

由於MAX是聚合類函式,只輸出一個最大值,所以我們不可能透過在MAX參數中添加陣列來得到各行的最大值,如下方兩個公式都不行:

=MAX(B53:C53,B54:C54,B55:C55,B56:C56,B57:C57)

=MAX(B53:B57,C53:C57)

要想一個公式就得到所有行的最大值,只能用MAP函式,=MAP(B53:B57,C53:C57,LAMBDA(X,Y,MAX(X,Y))):

4. 套用例舉

1)替換字元

小窩曾分享下拉填充REDUCE函式公式進行多字元替換。現在與MAP配合,可以一個公式完成所有替換:

=MAP(B89:B93,LAMBDA(a,REDUCE(a,F89:F93,LAMBDA(x,y,SUBSTITUTE(x,y,OFFSET(y,0,1))))))

2)匯總名單

如下,按班級匯總名單。

現在匯總表標題和班級都有了。用傳統公式的話,可以=TEXTJOIN("、",1,FILTER($C$98:$C$105,$B$98:$B$105=F98))並向下填充:

不填充,一個公式:

=MAP(F98:F99,LAMBDA(x,TEXTJOIN("、",1,FILTER(C98:C105,B98:B105=x)))):

課件下載方式


掃碼入群,下載視訊配套的Excel課件練習。

最後,歡迎加入Excel函式訓練營,學習51個函式、練習課件、輔導答疑。