只要把欄位貼到一個免費的覽器洗牌工具,幾秒鐘就能把 Sheets 清單隨機排序,該工具使用 Fisher-Yates 演算法,讓每一種可能的排列順序擁有相同的機會。整個工具完全在你的裝置上執行,所以資料絕不會傳送到伺服器,即使是包含數千列的清單,也能幾乎瞬間完成重新排序。這種方法適用於任何項目的清單——名字、工作、提示、抽獎報名——而且不需要建立輔助欄、撰寫公式,也不用擔心重新計算時悄悄毀掉你的隨機順序。凡是曾經嘗試用 =RAND() 或 =SORT() 來洗牌 Sheets 欄位的人都知道那種頭痛:隱藏的偏誤、易變的數字,以及按下 F9 後可能抹掉你原本想保留的順序的風險。專屬的瀏覽器隨機工具透過把洗牌工作交給經過驗證的演算法,並凍結結果直到你決定再次重新洗牌,就能避開以上所有問題。

為什麼 Google Sheets 公式不一定夠用
大多數教學都會指向兩種以公式為基礎的技巧。第一種是在每一列加上 =RAND() 輔助欄,然後依據該亂數排序;第二種則是依賴 =SORT() 或 =ARRAY_CONSTRAIN(SORT(...)),搭配一個隨機化的鍵。這兩種方法在緊急時都能用,但各自帶有一個隱而不顯的缺點,只要你不注意就會出包。
易變性是最明顯的問題。=RAND() 與 =RANDBETWEEN() 會在每次編輯、每次排序、每次重新計算時重新產生亂數。當同事一打開檔案,你所精心「鎖定」的順序就立刻消失了。若要凍結一個隨機順序,你通常必須複製輔助欄、以值的形式貼回,然後刪除公式欄——這三個手動步驟必須依照正確順序執行,否則洗牌結果就會遺失。
偏誤則是更隱晦的問題。依據 =RAND() 排序會產生視覺上隨機的結果,但底層演算法在遇到平手,或是隨機鍵剛好落入不尋常的分布時,可能會傾向某些排列順序。對於一般的班級名單來說這沒什麼關係。但若是應用在抽獎、A/B 測試,或任何有人可能合理質疑「這樣真的公平嗎?」的決策時,答案很快就會變得難以交代。Fisher-Yates 洗牌演算法——專用隨機工具背後的演算法——會把清單走過一遍,並把每個項目與從剩餘項目中均勻選出的位置交換,因此沒有任何排列順序比其他更可能出現。
最後,公式方法都活在試算表內。這在需要為其他地方(例如 Notion 表格、CSV 中的客戶記錄、從 PDF 複製的欄位,或是你不想貼到別人也能開啟的活頁簿中的一堆名字)的清單洗牌時,就不再方便了。瀏覽器型工具接受任何純文字,也回傳同樣的純文字,讓工作流程保持可攜性。
如何使用 List Randomizer 來隨機排序 Sheets 清單
List Randomizer 是一個免費的瀏覽器工具,能使用 Fisher-Yates 演算法把任何貼上的清單轉為公平的隨機順序。整個洗牌過程都在你的分頁中執行,所以資料絕不會離開裝置。
- 把清單貼上或輸入到文字方塊中,每行一個項目。
- 可以勾選「Remove duplicate lines」(移除重複行),只保留每個唯一項目的第一次出現。
- 點擊 Shuffle 按鈕,使用 Fisher-Yates 演算法隨機排序。
- 在結果方塊中讀取洗牌後的清單,並可隨時再按一次 Shuffle 取得新的順序。
- 點擊 Copy,將隨機化的清單複製到剪貼簿,以便在其他地方使用。
結果中每個項目各占一行,以全新的順序排列,可以直接貼回 Sheets 或其他地方。由於工具會自動清掉空白行並去除多餘的空白,即使從試算表複製過來雜亂的內容,也能產生整齊的隨機化欄位。
Fisher-Yates 洗牌內部機制
公平的洗牌比看起來更難。若選錯演算法,某些排列順序出現的頻率會比應有的更高,即使個別數字感覺起來是隨機的。若想更深入了解其運作原理,可參考如何公平地隨機排序一個清單指南,其中更詳細地說明了同樣的概念。
Fisher-Yates 洗牌解決了這個問題。它從最後一個位置往第一個位置走訪清單。在每一步中,它會從剩餘位置中均勻地隨機挑選一個,並把目前的項目與該位置的項目交換。經過 n 步後,每個項目都剛好被放置一次,原始清單的任何特定排列順序的機率恰好是 1 除以 n 階乘——等同於從所有排列中隨機選一個。
List Randomizer 採用此演算法的現代標準形式,有時稱為 Knuth 洗牌,其隨機選取範圍是從清單開頭到目前索引,而不是每次都涵蓋整個清單。兩種形式同樣公平;Knuth 變體只是更容易實作而不會出 off-by-one 錯誤。對於日常任務——抽出優勝者、設定輪流出場順序、編組——其結果與對每種可能的排列順序擲一顆完美平衡的骰子無異。
工具會從瀏覽器內建的 Math.random() 產生器取得亂數。這在課堂、職場、小額抽獎用途上具有統計上的公平性,但它是一個通用型產生器,並非密碼學安全,因此不該作為具有法律約束力的彩券的決定因素,也不該用於任何可預測序列可能被利用的場合。
隱私:資料完全不會離開你的覽器
由於工具完全在用戶端執行,你的清單是由目前分頁中的 JavaScript 處理,絕不會透過網路傳送。沒有上傳步、無需帳號、沒有任何分析事件會擷取文字方塊的內容,也沒有任何伺服器端的佇列在你等待回應時持有資料。當你關閉或重新整理分頁時,記憶體中的清單就消失了。
這項保證在幾種常見情境中格外重要。老師在隨機排序包含暱稱或敏感特殊考量的班級名冊時,不需要為了隨機點名順序就把這些名字送到第三方。小型企業舉辦員工抽獎時,可以放心地對一份參與者 CSV 進行洗牌,不必擔心檔案最後流入別人的資料庫。研究人員為小型質性研究隨機排序調查條件的順序時,也不必為了從一開始就不傳送資料的工具去跑隱私審查流程。
這個隱私模型不是一個你必須相信的承諾——它是一個關於純瀏覽器工具如何從架構上運作的描述,因為根本沒有伺服器會接收文字。你可以自行驗證:打開瀏覽器開發者工具的網路面板,執行一次洗牌,觀察是否出現任何夾帶你清單內容的外送請求。
隨機化清單的日常用途
人們在許多日常情境中都會使用清單隨機工具,範圍廣泛得令人意外。下表把常見情境對應到被洗牌的清單類型,以及隨機順序預期帶來的效果。
| 情境 | 隨機化的對象 | 洗牌的目的 |
|---|---|---|
| 課堂隨機點名 | 學生姓名名冊 | 點到每個人,而不是老是同一批志願者 |
| 站立會議順序 | 團隊成員清單 | 避免總是由同一個人先發言 |
| 抽獎或贈品活動 | 參與者欄位 | 以可辯護、無偏誤的方式抽出優勝者 |
| 寫作提示 | 故事構想或詞彙清單 | 透過強迫全新的起點來打破創作瓶頸 |
| 錦標賽或遊戲之夜 | 玩家姓名或挑戰項目 | 設定公平的輪流出場順序或選秀順位 |
| 問卷設計 | 問題或條件清單 | 降低回應中的順序效應 |
| 家事分配 | 家庭成員姓名 | 不傷感情地解決「誰去洗碗」的爭論 |
這些情境的共通點是,它們對公平性的重視勝過複雜度。一個能讓每個項目機會均等的快速瀏覽器工具就已足夠,你也能避免忍不住把順序偷偷傾向你心中最想先點名的那個人。
隨機化 Sheets 清單的方法比較
在選定工作流程之前,先並列比較主要選項會有所幫助。各種方法在易變性、公平性與隱私方面都有不同的處理方式。
| 方法 | 執行位置 | 公平性保證 | 結果穩定性 | 私立場 |
|---|---|---|---|---|
| =RAND() 輔助欄 + 排序 | 在試算表內 | 近似;可能傾向某些排列 | 易變——重新計算會重新洗牌 | 留在你掌控的試算表中 |
| 使用隨機鍵的 =SORT() | 在試算表內 | 近似 | 公式不變時穩定,編輯時易變 | 留在你掌控的試算表中 |
| Apps Script 自訂函式 | 試算表伺服器 | 取決於你撰寫的腳本 | 在重新執行前穩定 | 程式碼在 Google 的伺服器上執行 |
| 瀏覽器型 Fisher-Yates 工具 | 本機瀏覽器分頁 | 每種順序機會均等 | 在你再次點擊 Shuffle 前穩定 | 完全不上傳 |
當清單已經存在於試算表內,而且你只需要一個能立即採用的一次性隨機順序時,公式方式相當方便。當清單不在 Sheets 中、順序需要長時間保持凍結、資料較為敏感,或是你想要清晰、可稽核的公平性論述時,專用工具就能發揮價值。
隨機排序 Sheets 清單不一定需要輔助欄或脆弱的公式。只要把欄位貼到一個在本機執行 Fisher-Yates 洗牌的瀏覽器工具,複製結果,再貼回你的試算表——這是一個快速、可證公平,並且讓每筆資料都保留在裝置內的工作流程。
若你在權衡選項,免用程式將數字轉成英文(Google Sheets 適用)對此有詳細說明。