想让excel帮你随机抽菜?超简单:先把所有想吃的菜列成清单,再在要显示结果的单元格里输入 =index($a$2:$a$8,randbetween(1,rows($a$2:$a$8))) 就搞定。我这次用的是microsoft 365版本的excel,只要你不挪数据区域的位置,按一下 f9 就能重新抽新菜。
第一步:整理菜单清单
先在工作表左边空出一列放候选菜,A1单元格填“菜单候选”,A2到A8依次写上宫保鸡丁、番茄牛腩、红烧牛肉面、麻婆豆腐、鱼香肉丝、青椒炒蛋、虾仁炒饭。右边B1写“随机菜单”,B2留着放公式跑出来的结果。咱们先把候选范围定在 A2:A8,这样后面的公式才知道要从哪堆菜里抽。

第二步:输入随机菜单公式
选中B2单元格,在顶部的公式栏里输入 =INDEX($A$2:$A$8,RANDBETWEEN(1,ROWS($A$2:$A$8))),按 Enter 确认就行。公式栏里会显示完整的公式代码,单元格里只跳出抽中的菜名,不用你手动改结果。

这个公式拆成两层看很好懂:
| 函数 | 语法 | 在这里的作用 |
|---|---|---|
INDEX |
INDEX(array,row_num,[column_num]) |
从指定区域里按行号取出对应的菜名。 |
RANDBETWEEN |
RANDBETWEEN(bottom,top) |
在1到候选菜总数量之间随机生成一个整数。 |
ROWS |
ROWS(array) |
自动计算 A2:A8 一共有多少行,省得候选菜增减后还要手动改随机数上限。 |
几个参数的逻辑也很好懂:$A$2:$A$8 是候选菜单的区域;1 是随机序号的起点;ROWS($A$2:$A$8) 是随机序号的终点;前面加的 $ 是用来锁区域的,复制公式的时候抽取范围不会跑偏。
第三步:刷新随机结果
等B2跳出第一个菜名后,按 F9 就能触发重算,结果可能从“红烧牛肉面”变成“番茄牛腩”,或者别的候选菜。要是想把当前抽中的结果定死,可以复制B2,再右键选“选择性粘贴”改成值,之后再怎么重算结果都不会变。

操作的时候最容易碰到两个报错:要是出现 #VALUE!,一般是 RANDBETWEEN 的上下限不是合法数字,检查下是不是不小心把 ROWS() 写到引号里了;要是出现 #REF!,大概率是候选区域被删了,公式的引用范围断了,重新选一次 A2:A8 就好。
第四步:复制成多份菜单
要是你想一天随机出早、中、晚三份菜单,直接把B2的公式往下复制到B4就行。因为候选范围用了绝对引用 $A$2:$A$8,复制完每个单元格还是从同一列菜名池里随机抽。提醒一句哈:普通的 RANDBETWEEN 写法可能抽到重复的菜,想要强制不重复的话,就得换成排序随机数或者动态数组的写法。

换到别的场景直接套公式就行:比如候选菜放在 D2:D20,结果要显示在E2,就用 =INDEX($D$2:$D$20,RANDBETWEEN(1,ROWS($D$2:$D$20)));要是候选菜放在结构化Excel表格里,表名叫“菜单表”、列名叫“菜名”,公式可以写成 =INDEX(菜单表[菜名],RANDBETWEEN(1,ROWS(菜单表[菜名])))。对了,如果你用的是WPS或者旧版Excel,得先确认软件支不支持这些函数和结构化引用功能哈。
后面往菜单清单里加新菜的时候,记得同步把公式里的候选范围拉大,或者直接把原始数据转成Excel表格格式。这样以后不管是临时选午餐、排班抽人、随机抽题,都只要改候选列表就行,不用重新写公式。


















