今天我們來學習下另一個新函數——SCAN的用法,它跟上一周講過的REDUCE函數非常的相似,也是LAMBDA的輔助函數,只不過它會將所有遍歷的結果都顯示出來,而REDUCE只會顯示最后的結果。
一、SCAN
SCAN:通過對每個值應用 LAMBDA 來掃描數組,并返回具有每個中間值的數組。
語法:=SCAN ([initial_value],array,lambda (x,y,body) )
參數1:初始值
參數2:需要循環的數據區域
參數3:關于lambda的計算表達式
它的參數與之前講的REDUCE函數幾乎是一模一樣的,但是作用完全不同,SCAN函數會將每個值的結果顯示出來,而REDUCE函數它只會輸出結果,我們來具體演示下
二、案例演示
公式:=SCAN(0,C2:C5,LAMBDA(x,y,y*y+x))
參數1:0,表示起始值為0
參數2:C2:C5,表示需要循環的區域
參數3:LAMBDA(x,y,y*y+x),有關于lambda的表格式
如下圖所示,我們需要對當前的數據求平方和,REDUCE它只會顯示最終的結果,而SCAN函數會將每個值得結果都羅列出來,就是說結果個數與第二參數的個數是相等的,來簡單的說下計算過程
代入數字1,x為0,y為1,計算式為1*1+0,結果為1,會將結果存在x中進入下次循環,
代入數字2,x為1,y為2,計算式為2*2+1,結果為5
代入數字3,x為5,y為3,計算式為3*3+5,結果為14
代入數字4,x為14,y為5,計算式為4*4+14,結果為30
三、制作階梯圖
公式:=SCAN("",B2:B5,LAMBDA(x,y,REPT("|",y*200)&" "&TEXT(y,"0%")))
SCAN函數會顯示每一步的結果,我們就可以考慮使用REPT+豎線來構建一個階梯圖,構建它的前提是,數據要升序排序,并且將文字字體改成Playbill,這個字體會將豎線顯示為條形圖的樣子
REPT("|",y*200),這個函數的作用是將豎線重復顯示多次,得到豎線將其顯示為條形圖的樣子,TEXT(y,"0%")用來設置數據格式,將其轉換為百分比格式。
四、統計最大連續次數
公式:=MAX(SCAN(0,B2:B15,LAMBDA(x,y,IF(y="勝",x+1,0))))
在這里我們要判斷最大的連勝次數,判斷它是不是勝利,如果勝利就在當前的結果加1,如果失敗了,就返回0,從新開始計算勝利與否
五、合并單元格計算
公式:=VSTACK({"部門","銷量"},GROUPBY(SCAN(,A2:A12,LAMBDA(x,y,IF(y<>"",y,x))),C2:C12,SUM,,0))
這個公式的關鍵點就是SCAN(,A2:A12,LAMBDA(x,y,IF(y<>"",y,x)))
在這里我們將第一參數省略掉,函數就會自動返回第二參數的第一個值,在A2:A12這個區域中第一個值是【銷售1部】,之后從第二個元素開始判斷Y是否等于空值,條件成立則返回Y否則返回X,這樣的話就能將合并單元格拆分開,
隨后使用GROUPBY來進行分類匯總,求和就需要設置三參數為SUM,計數則將SUM改成COUNTA
最后使用VSTACK函數在最上方連接上表頭,這個就是公式的計算過程
以上就是今天分享的全部內容,相較于REDUCE函數,SCAN的應用應不算廣泛,大家了解下即可~
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.