Excel如何从相邻两列随机选取匹配的同组对应数据
Excel 随机选取匹配产品与价格的解决方案
核心问题说明
你之前的写法会出现匹配错误,本质是两次独立调用RANDBETWEEN函数会生成完全无关的随机行号,导致产品和价格取自不同行。只要保证两个取值公式调用同一个固定的随机行号,就能实现匹配。
以下是三种不同场景的实现方法,默认你的数据规则为:A列存产品、B列存价格,第1行为表头,数据从第2行开始。
方案1:辅助单元格法(全版本兼容,最稳妥)
先找任意空白单元格存放固定随机行号,后续取值都调用这个行号即可:
- 比如选D1单元格存放随机行号,输入公式:
=RANDBETWEEN(1,COUNTA(A:A)-1)
这里COUNTA(A:A)-1是自动统计数据总行数,扣掉表头行,后续新增产品不用手动修改公式范围 - 输出随机产品的单元格(比如E1)输入:
=INDEX(A:A,D1+1) - 输出对应价格的单元格(比如F1)输入:
=INDEX(B:B,D1+1)
方案2:动态数组整行选取法(适合Excel 365/2021及以上版本)
不需要辅助列,一步输出匹配结果:
- 同时选中两个相邻的空白单元格,比如同时选中E1和F1
- 输入公式:
=INDEX(A:B,RANDBETWEEN(2,COUNTA(A:A)),0) - 按回车即可自动在两个单元格分别输出匹配的产品和价格,公式里的
0参数表示返回选中行的整列内容,会自动匹配你选中的单元格数量输出对应列的结果。
方案3:无辅助列旧版Excel适配法
如果是不支持动态数组的旧版本Excel,也可以用匹配逻辑实现:
- 输出随机产品的单元格(比如E1)输入:
=INDEX(A:A,RANDBETWEEN(2,COUNTA(A:A))) - 输出对应价格的单元格(比如F1)输入:
=INDEX(B:B,MATCH(E1,A:A,0))
注意:该方案要求A列的产品名称不能有重复,否则会默认匹配第一个出现的同名产品对应价格,更推荐用方案1避免该问题。
注意事项
- 按F9刷新工作表时,随机选中的匹配内容会自动更新
- 若需要固定当前选中的结果不再变动,选中输出的内容右键点击「复制」,再右键点击「粘贴为值」即可
- 如果你的数据没有表头,直接从第1行开始存储产品和价格,把上面公式里的行号偏移量(加减1的部分)删掉即可
内容的提问来源于stack exchange,提问作者Jelmer405
相关产品推荐
相关产品推荐

