在先前的文章中:Excel-挑出一欄中非空白的儲存格內容(陣列公式,OFFSET),為了挑出非空白的儲存格,使用陣列公式來處理。有網友很熱血的想要使用非陣列公式的方式來處理,今天我也花了一些時間來想想,網友們再看看是否有更恰當的做法。
如下圖,要根據『項目』這一欄中非空白的儲存格,將數值和項目集合至另一欄,該如何處理?
【公式設計與解析】
(1) ($B$2:$B$24<>"")*ROW($B$2:$B$24))
找出在B欄中不是空白儲存格的列號,本例傳回:{0;0;4;0;6;0;0;9;0;11; ... }。
(2) SUM(--(($B$2:$B$24<>"")*ROW($B$2:$B$24)=0))
找出在B欄中不是空白的儲存格列號等於 0 者有幾個。
(3) SUMPRODUCT(SMALL((第(1)式,第(2)式)+ROW(1:1))
找出在B欄中第1個不是空白儲存格者的列號(除了 0 以外的最小值)。
儲存格D2:=IFERROR(OFFSET($A$1,第(3)式-1,,,),"")
利用 OFFSET 函數取得不是空白儲存格者的列號所對應的儲存格內容,如果查詢不到內容而傳回錯誤訊息,再使用 IFERROR 函數將錯誤訊息轉換為空白。
完整公式:
儲存格D2:=IFERROR(OFFSET($A$1,SUMPRODUCT(SMALL((($B$2:$B$24<>"")*
ROW($B$2:$B$24)),SUM(--(($B$2:$B$24<>"")*ROW($B$2:$B$24)=0))+
ROW(1:1)))-1,,,),"")
同理:
儲存格E2:=IFERROR(OFFSET($B$1,SUMPRODUCT(SMALL((($B$2:$B$24<>"")*
ROW($B$2:$B$24)),SUM(--(($B$2:$B$24<>"")*ROW($B$2:$B$24)=0))+
ROW(1:1)))-1,,,),"")

您好,感謝您的教學讓我受益匪淺,想請教一下,若要完成如下連結圖片,該如何設定,謝謝 https://drive.google.com/open?id=0B9UHsAMmy57bVHJSWnVLd0VCX28
您未開分享,所以無法下載。
不好意思,已開方權限,並改成xls檔: https://drive.google.com/open?id=1SNszt69m5AmuE4ZcC6AJse91YPrU7u6b-_GYLwRq4M0
您的檔案我已看過,目前為止,我也沒有可解決的方案。你可能要向其他人再求救,我會持續再想想,有可解決的答案,再通知你。
謝謝您的幫忙
看完兩篇文章後 我想到的事情是 上一篇文章中(http://isvincent.pixnet.net/blog/post/44854588)的方法 只要將需要陣列的部分獨立出來就可以了 將IF函數獨立出來放在C攔 C2=IF(B2<>"",ROW(B2),9999) D蘭和E蘭函數改為 D2=INDIRECT("A"&SMALL($C$2:$C$18,ROW(1:1))) E2=INDIRECT("B"&SMALL($C$2:$C$18,ROW(1:1)))
在這裡要謝謝老師 我EXCEL從完全不會到現在 都是看老師的文章學習的 講解得非常清楚 學習得很深刻 謝謝老師
謝謝你光臨我的網站。