2361 |
如何設定輪流與廠商叫貨-COUNTIF、INDEX、SMALL、IF、ROW、IFERROR |
燕秋:「錦子老師,請教一個問題,如果我有五家廠商可以提供A貨品,五家廠商可以提供B貨品。老闆期待輪流跟這10家買貨,一定要輪流,不能偏愛那家,這樣可以用Excel做控管嗎?
目前我們有三個叫貨人員(劉備、關羽、張飛),常常變成某家叫的次數比較高,或者不知道輪到誰了?謝謝!」
錦子老師:「其實作法如下:
統計人員派遺次數
首先在D2:D4輸入各個人員姓名。
點取E2儲存格輸入公式:
=COUNTIF(A:A,D2)
再將公式複製到E3:E4儲存格,統計每個人員的派遺次數。
【公式說明】
COUNTIF(範圍,搜尋值) 統計搜尋值在範圍中出現的次數。
COUNTIF(A:A,D2) 統計A欄中D2儲存格內容出現的次數。
統計廠商被叫貨次數
首先在G2:G11輸入各個廠商名稱。
點取H2儲存格輸入公式:
=COUNTIF(B:B,G2)
再將公式複製到H3:H11儲存格,統計每個廠商被叫貨次數。
統計目前輪到那位廠商被叫貨
由於前圖所示,我們會發現廠商的被叫貨次數有1~3,因此我們函數的設計會優先安排最小值的廠商。
點取J2儲存格輸入「推薦廠商」字串。
將K1到K10儲存格框選起來(這是由於只有10個廠商要安排,故只框10列即可)。
在編輯列輸入公式:
=IFERROR(INDEX(G1:G11,SMALL(IF(H1:H11=MIN(H1:H11),ROW(1:11)),ROW(1:11)),0),"")
由於是陣列公式故請按CTRL+SHIFT+ENTER鍵完成輸入。
【公式說明】
IFERROR(公式,填入內容) 當公式出現錯誤值時,要填入什麼內容。
INDEX(範圍,欲抓取資料在列,欲抓取資料所在欄) 傳回在範圍中欲抓取資料列與欄交叉儲存格內容。
SMALL(數值,K) 傳回數值或範圍中第K小的值。
IF(條件,成立的動作,不成立的動作)
ROW() 傳回目前儲存格列號。
ROW(1:11) 傳回1:11列的各個列號。
IF(H1:H11=MIN(H1:H11),ROW(1:11)) 如果H1:H11等於範圍中最小值,傳回各個最小值所在的列號。
SMALL(IF(H1:H11=MIN(H1:H11),ROW(1:11)),ROW(1:11)) 傳回IF(H1:H11=MIN(H1:H11), ROW(1:11))傳回最小值所在列號中的第(目前所列列號)小的值。
INDEX(G1:G11,SMALL(IF(H1:H11=MIN(H1:H11),ROW(1:11)),ROW(1:11)),0) 傳回G1:G11範圍中抓取SMALL(IF(H1:H11=MIN(H1:H11),ROW(1:11)),ROW(1:11))傳回的列值所在儲存格內容。
IFERROR(INDEX(G1:G11,SMALL(IF(H1:H11=MIN(H1:H11),ROW(1:11)),ROW(1:11)),0),"") 如果公式出現錯誤值,則不填入資料。
由於1次的廠商有5個,故顯示5筆資料。若我們在往後日子於B欄安排這5家廠商後,由於有9家廠商都是2次,故K欄會顯示9家廠商。
部落格相關範例
2017.10.14 |
|
2017.04.27 |
|
2017.04.26 |
|
2020.11.27 |
|
2019.06.18 |
|
2020.11.26 |
|
2017.09.01 |
|
2017.02.06 |
|
2019.10.25 |
|
2020.11.29 |
|
2014.08.02 |
|
2020.11.28 |
|
2019.10.24 |
|
2020.11.30 |
|
2017.05.03 |
|
2019.10.09 |
|
2020.01.08 |
|
2020.09.04 |
|
2020.01.02 |
|
2019.12.18 |
|
2019.12.17 |
|
2019.11.18 |
|
2019.12.28 |
|
2019.12.29 |
|
2019.12.22 |
|
2020.01.18 |
留言列表