問題求助SOS:EXCEL如何在“名稱”第一次出現后面顯示“對應值”第一次不為0的值?
看到這個問題,小編又找到了一篇之前寫過的文章:
textjoin+if+countif:合并重復值對應的文本,且只在首個重復位置處返回結果。
里面的思路正是今天問題所要借鑒的。只不過在之前的基礎上增加了一些難度,把“首個非零值的提取”這個需求又加進去了。總體上來說還是比較簡單的。
如下圖所示:
A列是名稱列,B列是名稱所對應的對應值。同一個名稱可能對應多個不同的對應值,顯示在多行。
現在我們想要在D列獲取:每個重復名稱,在首個名稱出現的位置處顯示其對應的B列的首個非零對應值。
第一步
篩選重復姓名對應的值(條件1)
首先輸入FILTER篩選函數:
=FILTER(B$2:B$8,A$2:A$8=A2)我們可以先篩選出同一名稱(A$2:A$8=A2)對應的B$2:B$8區域的對應值。第二步:
篩選重復名稱對應的非零值(條件1+條件2)
我們繼續完善公式,對FILTER函數增加篩選條件:
=FILTER(B$2:B$8,(A$2:A$8=A2)*(B$2:B$8<>0))(B$2:B$8<>0):表示B$2:B$8對應值區域不為0值的條件。上一步中(A$2:A$8=A2)可以將統一重復名稱中所有的對應值篩選出來,而這一步中又添加一個條件,將篩選出來的對應值中的0值剔除掉。
因為上一步中FILTER函數返回的數組溢出結果是縱向的,不做任何處理直接下拉填充公式會造成下方的連環遮擋,產生#SPILL!值。
所以我們使用TRANSPOSE轉置函數:
=TRANSPOSE(FILTER(B$2:B$8,(A$2:A$8=A2)*(B$2:B$8<>0)))第三步:
提取首個非零值
使用TAKE函數:
=TAKE(TRANSPOSE(FILTER(B$2:B$8,(A$2:A$8=A2)*(B$2:B$8<>0))),,1)TAKE函數是Excel中的數組函數,主要用于從數組或區域中提取指定數量的行或列。所以我們提取上一步返回結果,也就是全部名稱對應的非零對應值中的首個值(即每個數組溢出結果的首列)。第四步:
跳過重復名稱顯示值
我們運用COUNTIF函數:
我們在A$2:A2這個動態逐漸擴展(擴大)的區域內(起始單元格鎖行,結束單元格相對引用),依次統計A列中每個單元格名稱出現的個數。那么每個相同名稱分組內,序號是1的位置處即重復名稱首個出現的位置。通過上一步總結出的規律,我們使用IF條件判斷函數:
=IF(COUNTIF(A$2:A2,A2)=1,TAKE(TRANSPOSE(FILTER(B$2:B$8,(A$2:A$8=A2)*(B$2:B$8<>0))),,1),"")如果序號為1,那么我們就返回顯示“首個非零值”,否則我們顯示空值。學習Excel,如果你沒有天賦,那就一直重復,當你快到本能反應的時候,你的重復就是別人眼中的天賦,沖破捆綁,展翅翱翔。回顧關鍵內容,善用圖片表達,學會建立聯系,拓展深度廣度,濃縮關鍵概念,應用到行動中,善于歸納總結,嘗試進行分享。