二維碼 購物車
部落窩在線教育歡迎您!

SCAN函數(shù)基本用法和典型應(yīng)用

?

作者:小窩來源:部落窩教育發(fā)布時間:2024-03-27 14:36:12點擊:1588

分享到:
0
收藏    收藏人氣:0人
版權(quán)說明: 原創(chuàng)作品,禁止轉(zhuǎn)載。

編按:

教程介紹SCAN函數(shù)的基本用法和3個典型應(yīng)用。由于SCAN函數(shù)與REDUCE函數(shù)類似,所以教程中還會比較它們的不同。

 

SCAN函數(shù)與前面介紹的REDUCE函數(shù)類似,都是LAMBDA的好幫手。這兩個函數(shù)有很多相同的地方,因此下方小窩在介紹的時候,會比較SCAN函數(shù)與REDUCE函數(shù)的不同。

1.作用與語法

SCAN函數(shù)將初始值、數(shù)組代入LAMBDA函數(shù)中進(jìn)行逐步累加運算并把每步運算結(jié)果都輸出。

=SCAN(初始值,數(shù)組,LAMBDA(參數(shù)1,參數(shù)2,計算式)

函數(shù)的各參數(shù)與REDUCE含義一致。

REDUCE只將最后一步的結(jié)果輸出,而SCAN會把每步運算的結(jié)果都輸出,輸出的肯定是數(shù)組。兩者具體不同處看下方的基本用法。

2.基本用法

1)給出具體初始值

譬如做如下數(shù)據(jù)乘積運算。

 

表格
描述已自動生成

 

REDUCE公式=REDUCE(1,B2:E3,LAMBDA(x,y,x*y)),結(jié)果如下圖:

 

 

將公式中的函數(shù)替換為SCAN, =SCAN(1,B2:E3,LAMBDA(X,Y,X*Y)),結(jié)果如下圖:

 

 

公式參數(shù)完全一樣,REDUCE只輸出了最后一次運算的結(jié)果“1209600”,SCAN則把數(shù)組Y中每個數(shù)據(jù)參與的運算結(jié)果都輸出了。

SCAN的最后一行最后一列的值,=TAKE(SCAN(1,B2:E3,LAMBDA(X,Y,X*Y)),-1,-1),就是REDUCE的結(jié)果。

 

 

2)省略初始值

如果省略初始值,則公式會把數(shù)組中的第一個數(shù)據(jù)作為第一次運算的結(jié)果。

譬如連接單元格中字符。

 

圖形用戶界面, 表格
描述已自動生成

 

先來看給定初始值為1的效果。

 

 

再來看省略初始值的效果。

 

 

順便看看REDUCE省略初始值的結(jié)果,只返回最后一次運算的結(jié)果。

 

 

重要提示

在基礎(chǔ)用法中,我們更換公式函數(shù),前后兩個公式都可以用。但這并不意味著每個REDUCE公式都可以直接更換為SCAN函數(shù)公式進(jìn)行使用。因為Excel函數(shù)不支持嵌套的數(shù)組(數(shù)組中的數(shù)組),所以只有REDUCE每步運算中的結(jié)果不是數(shù)組,才可以將REDUCE直接改成SCAN

譬如按次數(shù)復(fù)制數(shù)據(jù)。

REDUCE公式=REDUCE("數(shù)據(jù)",B21:B24,LAMBDA(X,Y,VSTACK(X,EXPAND(Y,OFFSET(Y,,1),,Y))))

 

 

如果你將公式中函數(shù)改成SCAN,將出現(xiàn)#CALC!錯誤。

 

 

原因就在于公式中VSTACK在每步計算中輸出的都是數(shù)組而不是一個值!

 

3.典型應(yīng)用實例

1)拆分并填充合并單元格

譬如下方,公式可以寫成=SCAN(,B34:B43,LAMBDA(X,Y,IF(Y<>"",Y,X)))

 

 

說明:

初始值省略,代表第一次運算的結(jié)果就是A;第二次運算,YB35,等于空,運算結(jié)果就是上一次X,即A;第三次運算,B36同樣等于空,結(jié)果還是上次的X,即A;第四次運算,B37不等于空,運算結(jié)果就是YB……

 

如果用傳統(tǒng)函數(shù)來完成,則可以用LOOKUP座字法查找。

 

 

如果用REDUCE函數(shù),則公式=REDUCE(,B34:B43,LAMBDA(X,Y,VSTACK(X,IF(Y<>"",Y,TAKE(X,-1)))))

 

 

2)求連續(xù)出現(xiàn)的最高次數(shù)

譬如求下方各職員第5周的最大連續(xù)加班天數(shù)。

 

 

公式=MAX(SCAN(0,C48:I48,LAMBDA(X,Y,IF(Y="",X+1,0))))

 

 

說明:

傳統(tǒng)上,統(tǒng)計某連續(xù)出現(xiàn)的次數(shù)使用FREQUENCY函數(shù)。此處用FREQUENCY的話,公式=MAX(FREQUENCY(IF(C48:I48="",COLUMN(A:G)),IF(C48:I48="",COLUMN(A:G))))。該公式不但長,并且不易理解。

 

但用SCAN則既簡短,又好理解。從周1到周7,如果單元格數(shù)據(jù)等于√,則天數(shù)加1;不等于,則天數(shù)歸0。以何冀川來說,周1加班,結(jié)果是0+1=1;周2沒有加班,結(jié)果是0;周3加班,結(jié)果是0+1=1;周4加班,結(jié)果是1+1=2;周5、6、7都沒有加班,結(jié)果都是0

 

 

最后用MAX取最大值。

 

3)求累計值首次達(dá)標(biāo)時間

下方是個月的銷售值,求累計銷售突破2萬的月份。

 

 

小窩曾用LAMBDA遞歸運算完成累計值首次達(dá)標(biāo)月份的查找,估計很多伙伴看得頭大。這次用SCAN搭配XLOOKUP則簡單易懂。

公式=XLOOKUP(TRUE,SCAN(,C58:C69,LAMBDA(x,y,x+y))>=F57,B58:B69)

 

 

說明:

SCAN(,C58:C69,LAMBDA(x,y,x+y))部分可以生成銷售金額累加數(shù)組;然后將該組數(shù)與達(dá)標(biāo)金額F57進(jìn)行比較得到一串由FALSETRUE組成的數(shù)組;最后用XLOOKUP查找TRUE,得到第一個符合條件的月份。

 

4.總結(jié)

SCAN函數(shù)與REDUCE函數(shù)一樣,自帶累加器,可以對數(shù)組進(jìn)行累加運算。與REDUCE不同的是,SCAN函數(shù)會將中間的運算結(jié)果也一并輸出。

 

本文配套的練習(xí)課件請?zhí)砑涌头⑿?span>buluowojiaoyu索取。

Excel高手,快速提升工作效率,部落窩教育Excel精品好課任你選擇!

掃下方二維碼關(guān)注公眾號,可隨時隨地學(xué)習(xí)Excel

相關(guān)推薦:

LAMBDA遞歸運算

坐字法查找合并單元格

REDUCE函數(shù)用法

連續(xù)數(shù)統(tǒng)計就用FREQUENCY

版權(quán)申明:

本文作者小窩;部落窩教育享有稿件專有使用權(quán)。若需轉(zhuǎn)載請聯(lián)系部落窩教育。