跳到主要內容跳到頁尾

今天午餐吃什麼?用下拉選單與核取方塊做餐廳抽選器

5 分鐘閱讀Lv.3 中級摘要與日期

把分類與餐廳整理成兩欄,用 FILTER、UNIQUE、INDEX 與 RANDBETWEEN 做午餐抽選。包含全部分類、動態下拉、重複餐廳、空名單與重抽核取方塊,說明為什麼其他編輯也會改變結果。

發布 更新

文章目錄

「今天吃中式還是日式?」想好分類,還是選不出餐廳。我會先把附近的店整理成清單,讓試算表挑一間;不挑分類時,就從全部餐廳裡抽。

這篇改寫自方格子午餐抽選器。舊版把每種料理放一欄,新增分類還要改長串公式;新版改成兩欄資料,增加餐廳就是增加一列。這裡用合成店名練習,不涉及實際營業或外送資訊。

一列放一個分類與餐廳

開一張空白工作表,把資料貼到 A1。第 7 列沒有餐廳、第 8 列沒有分類;最後一列也留空。這些列都不參加抽選。

貼到 A1,欄位以 Tab 分隔
分類	餐廳
中式	阿春便當
日式	小森食堂
素食	青葉蔬食
中式	阿春便當
中式	巷口麵店
日式	
沒有分類店
素食	青葉蔬食

阿春便當與青葉蔬食故意各放兩次。這次規則是「同名餐廳算一個選項」,所以先去重再抽。若要區分不同分店,名稱就寫成「阿春便當・站前店」等完整識別,不能只靠相同店名。去重以前也要確認多餘空白、全半形或不同寫法;這個抽選器不負責把所有看似同名的店自動合併,可先參考 文字清理。

先保留幾個位置:E2 選料理、F2 放重抽核取方塊、E4 顯示結果;H2:H10 是分類選項、J2:J10 是當下可抽的餐廳。

分類清單自動加上「全部」

在 H1 寫「分類選項」,H2 放這條,先清空下面的 H3:H10:

Google 試算表公式
fx

只列出有分類也有餐廳的類別,去重後在最上面加全部

=IF( COUNTIFS(A2:A10, "<>", B2:B10, "<>")=0, "全部", VSTACK( "全部", UNIQUE(FILTER(A2:A10, A2:A10<>"", B2:B10<>"")) ) )

依這份資料,清單應是「全部、中式、日式、素食」,保留分類首次出現的順序。這裡的「全部」是保留選項,資料分類不要也叫「全部」。COUNTIFS 先數分類、餐廳皆非空的列;全空時直接回一格「全部」,有有效資料才堆疊分類。不要只在 VSTACK 外包 IFERROR:錯誤可能是陣列裡的一格,會被換成第二個「全部」。

選取 E2,到「資料」的資料驗證新增規則,選範圍來源的下拉式選單,來源填 H2:H10,無效資料選拒絕輸入,完成後選「全部」。選單設定可搭配 下拉選單入門 操作。

先看候選餐廳,再抽其中一間

在 J1 寫「候選餐廳」,J2 貼這條,J3:J10 先留空:

Google 試算表公式
fx

分類符合或選全部,排除不完整列,再按餐廳去重

=IFERROR( UNIQUE( FILTER( B2:B10, A2:A10<>"", B2:B10<>"", ((E2="全部")+(A2:A10=E2))>0 ) ), "" )

條件裡的加號把「選全部」與「分類相同」合成任一成立即可。先 FILTER 篩出符合列,再 UNIQUE 去重。選「全部」應得到阿春便當、小森食堂、青葉蔬食、巷口麵店四間;選「日式」只剩小森食堂,空餐廳那列不會混進來。

接著在 F1 寫「重抽」,選取 F2,用「插入」加入核取方塊,保留預設 TRUE/FALSE。E4 貼上:

Google 試算表公式
fx

候選為空先顯示提示,否則從去重後的餐廳抽一間

=IF( COUNTIF(J2:J10, "?*")=0, "沒有符合餐廳", INDEX( J2:J10, RANDBETWEEN(1, COUNTIF(J2:J10, "?*"))+IF(F2, 0, 0) ) )

COUNTIF 的 ?* 數至少有一個字元的餐廳名稱;沒有選項時,不會把隨機數上限設成 0。候選是從 J2 開始連續排的,所以 INDEX 可以用 1 到候選數量挑一格。

選日式後只會抽到小森食堂;切回全部並連續切換核取方塊,結果都會落在四個候選裡。

IF(F2,0,0) 讓公式引用核取方塊,勾選與取消都加 0,不改變抽選範圍。抽中的餐廳可以和上次相同,不能把「這次沒換店」當成沒有重新計算。

核取方塊沒有把結果鎖住

RANDBETWEEN 是會重新計算的隨機函式。切換核取方塊是方便的重抽入口,其他儲存格編輯或試算表的重新計算也可能讓結果改變;這不是只有按鈕能更新的抽籤系統。重新載入工作表後,分類仍是全部、核取仍是未勾選,餐廳卻可能變成另一間;控制狀態保存和隨機結果固定是不同的事。若在「檔案 > 設定 > 計算」改成手動計算,核取方塊與其他編輯都不會觸發重算,要按「計算」才會重抽。

選完店要分享給同事時,把 E4 複製後在另一格「僅貼上值」,再註明日期與選的分類。不要只丟一張仍含隨機公式的連結,期待對方看到同一家。

去重後每個候選各占一格,是本篇的抽選單位。這裡沒有做統計檢定,也沒有實作加權、不重複輪流或營業時間排除。隨機函式基礎見 亂數與序列;一次產生多格、允許重複姓名的案例可看 MAKEARRAY 抽樣。

空白、重複與新增分類怎麼檢查?

操作應檢查的結果
選全部四間不同餐廳,不含沒有分類店
選日式候選與結果都只有小森食堂
選素食重複的青葉蔬食只占一個候選
有效資料全部清空分類保留全部;結果顯示沒有符合餐廳
選單仍留著已刪除的分類候選空白;結果顯示沒有符合餐廳,重新選有效分類
在輸出清單下方放文字可能擋住陣列展開,先清空再檢查公式

公式只讀到第 10 列。要擴大清單時,分類公式、候選公式內的 A2:A10、B2:B10 範圍須一起改;若候選超過九間,也要擴大抽選公式的 J 範圍與預留空間。分類下拉的來源範圍同樣要能容納新增選項。

1

加一種料理,不新增公式分支

把 A10:B10 改成「泰式、微笑咖哩」。需要多寫一個 IF 分支嗎?選泰式後應抽到誰?

我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
#午餐抽選#隨機抽樣#下拉選單#核取方塊
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。