Excel RANDARRAY公式需求:生成合规的每周随机患者抽检安排
药物检测随机抽检Excel实现方案
核心需求梳理
- 65位患者(编号1-65),每周每人必须被抽检2次
- 单日抽检名单中无重复患者编号
- 每周的抽检日期分配模式(即患者被分配到哪两天)随机且不与以往重复
分步实现方案
1. 生成患者的随机抽检日期(每人2天,无重复)
在辅助区域(比如K2:K66,对应1-65号患者),使用以下公式为每位患者随机分配2个不同的星期几(用1=周日、2=周一…7=周六表示):
=TEXTJOIN(",",TRUE,SORT(RANDARRAY(1,2,1,7,TRUE)))
- 说明:
RANDARRAY(1,2,1,7,TRUE)生成2个1-7的不重复随机数,SORT排序保证日期顺序统一(避免"1,3"和"3,1"被误判为不同模式),TEXTJOIN用逗号拼接成字符串方便后续处理。
2. 确保每周抽检模式不重复
为了避免每周的日期分配模式重复,需要生成当前周模式的唯一标识并和历史记录对比:
- 在单元格
L1生成当前周模式的哈希值:=HASH(TEXTJOIN("|",TRUE,K2:K66)) - 在另一个工作表(比如
历史记录)中记录每周的哈希值,每次生成新周模式时,用以下公式校验是否重复:
如果显示“模式重复”,按=IF(COUNTIF(历史记录!A:A,L1)>0,"模式重复,请重新生成","模式可用")F9刷新公式重新生成日期分配。
3. 生成每日抽检名单
现在将患者按分配的日期归类到对应星期的行中(假设A2:J8是7行10列的抽检表,对应周日到周六):
- 以周日(第2行,对应日期标识1)为例,在
A2输入以下公式并向右填充到J2:
按=INDEX($A$2:$A$66,SMALL(IF(ISNUMBER(SEARCH("1,",$K$2:$K$66))+ISNUMBER(SEARCH(",1",$K$2:$K$66)),ROW($K$2:$K$66)-1,""),COLUMN(A1)))Ctrl+Shift+Enter(Excel 365版本可直接回车),会自动列出所有被分配到周日的患者编号。 - 同理,修改公式中的"1"为"2"(周一)、"3"(周二)…"7"(周六),分别填充到对应行(
A3:J3到A8:J8)。 - 说明:公式会自动筛选出日期组合包含对应数字的患者,且单日名单无重复(每个患者仅被分配到2天,且日期组合唯一)。
4. 自动刷新与维护
- 每周生成新抽检模式时,选中
K2:K66区域按F9刷新,校验哈希值确认不重复后,再更新每日抽检名单。 - 若需固定某周抽检结果,选中对应区域右键「复制」,再右键选择「粘贴值」即可锁定数据,避免公式刷新。
内容的提问来源于stack exchange,提问作者Clarisa
相关产品推荐
相关产品推荐

