問題
如下圖:
![]()
左側是所有客戶的進貨情況表,要求分客戶進行顯示在右側區域內。
具體要求用公式完成以下三個計算:
從H3單元格開始顯示客戶A進貨商品名稱;
從I2單元格開始顯示對應的商品批發價格;
從J2單元格開始顯示客戶A進貨數量。
如何解決?
解決思路
1.篩選:找出C列(客戶A進貨數量)不為空的單元格
2.定位:獲取這些非空單元格在A列中的相對位置
3.排序:從小到大排列這些位置序號
4.提取:根據序號從商品列表中提取對應的商品名稱
解決問題
在H3單元格中輸入公式:
=IFERROR(INDEX($A$3:$A$12, SMALL(IF($C$3:$C$12<>"", ROW($A$3:$A$12)-ROW($A$3)+1), ROW(A1))),"")Enter,可提取客戶A的第一種進貨商品,將公式向下填充,可得所有進貨商品,如下圖:
![]()
公式解析
步驟1:$C$3:$C$12<>""
作用:判斷C3到C12單元格是否不為空
結果:返回一個TRUE/FALSE數組
示例結果:
{FALSE; TRUE; FALSE; TRUE; TRUE; FALSE; TRUE; FALSE; TRUE; TRUE}
步驟2:
ROW($A$3:$A$12)-ROW($A$3)+1
作用:生成相對行號序列
計算過程:
- ROW($A$3:$A$12) →{3;4;5;6;7;8;9;10;11;12}
- ROW($A$3) →3
- {3;4;5;6;7;8;9;10;11;12}-3 + 1→{1;2;3;4;5;6;7;8;9;10}
結果:{1;2;3;4;5;6;7;8;9;10}
步驟3:
IF($C$3:$C$12<>"", ROW($A$3:$A$12)-ROW($A$3)+1)
作用:如果C列不為空,返回對應的行號;否則返回FALSE
計算過程:
- TRUE→返回對應行號
- FALSE→返回FALSE
結果:
{FALSE;2;FALSE;4;5;FALSE;7;FALSE;9;10}
步驟4:SMALL(IF(...), ROW(A1))
作用:從小到大提取符合條件的行號
計算過程:
-ROW(A1)→1(當公式在H3單元格時)
-SMALL({FALSE;2;FALSE;4;5;FALSE;7;FALSE;9;10},1)→2
- 當公式下拉到H4時:SMALL(...,2)→4
- 當公式下拉到H5時:SMALL(...,3)→5
- 依此類推...
結果序列:{2,4,5,7,9,10}
步驟5:INDEX($A$3:$A$12, SMALL(...))
作用:根據行號從商品列表中提取對應的商品名稱
計算過程:
- INDEX($A$3:$A$12, 2)→"商品二"
- INDEX($A$3:$A$12, 4)→"商品四"
- INDEX($A$3:$A$12, 5)→"商品五"
- 依此類推...
步驟6:IFERROR(INDEX($A$3:$A$12, SMALL(...)),"")
作用:根據計算結果填充值,避免出現無商品時顯示錯誤值。
計算過程:
如果計算結果是TURE,返回商品名稱
如果計算結果是FALSE,返回空值
最終結果:依次顯示客戶A有進貨的商品名稱
End
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.