无忧启动论坛

标题: 求帮忙写个Excel函数,要求如图,谢谢 [打印本页]

作者: lgylgyxy    时间: 2025-8-13 11:27
标题: 求帮忙写个Excel函数,要求如图,谢谢
本帖最后由 lgylgyxy 于 2025-8-13 13:41 编辑

求帮忙写个Excel函数,要求如图,谢谢
A1列,B1列里不是连续的数字,可以看着为手动填入的任意数字
A1列,B1列里可能有重复的数字,也可能没有
A1单独列没有重复的数字
B1单独列也没有重复的数字

从A1列中随机选出4个数字,
从B1列中随机选出1个数字,这个数字不能与从A1中选出的任一数字重复,如果重复了,需再次选出,直至不重复,然后显示输出在excel单元格里

=INDEX(A1:A29, INDEX(SORTBY(FILTER(ROW(A1:A29), A1:A29<>""), RANDARRAY(COUNTA(A1:A29))), {1,2,3,4}))


=IFERROR(INDEX(FILTER(B1:B7, (B1:B7<>"")*ISNA(MATCH(B1:B7, D2:G2, 0))), RANDBETWEEN(1, ROWS(FILTER(B1:B7, (B1:B7<>"")*ISNA(MATCH(B1:B7, D2:G2, 0)))))), "无符合条件的值")

1.rar (8.33 KB, 下载次数: 12)









作者: guong    时间: 2025-8-13 12:06
不会 帮顶
作者: Zhengqiang5q    时间: 2025-8-13 12:08
路过而已!
作者: lbw2007    时间: 2025-8-13 12:17
本帖最后由 lbw2007 于 2025-8-13 12:28 编辑

这哪里是考公式,明显是在考算法。

需要Excel支持动态数组函数(如FILTER, LET, RANDARRAY等),一般是Excel 365/2021及以后版本。
若用的是老版本Excel,需要用VBA来实现。
首先A取的4个数字,在D1单元格输入数组公式(Excel 365/2021支持动态数组,直接回车;旧版本需要Ctrl+Shift+Enter):
INDEX($A$1:$A$35, SORTBY(SEQUENCE(4), RANDARRAY(4)))
这会随机选4个A列不同数字(位置1-35)放在D1:G1。

从B列中选一个不在上述4个数字里的数字
在H1输入以下公式:
=LET(
  selectedA, D1:G1,
  bValues, FILTER($B$1:$B$35, ISNUMBER($B$1:$B$35)),
  filteredB, FILTER(bValues, ISNA(MATCH(bValues, selectedA, 0))),
  INDEX(filteredB, RANDBETWEEN(1, ROWS(filteredB)))
)
从B列中随机选1个不同数字,不等于A列选的4个数字

作者: RNM25728    时间: 2025-8-13 12:37
要用组合数据
作者: 9zhmke    时间: 2025-8-13 13:07
你描述的情景也许是你自己设想的算法,但不一定是最好的算法,你可以把你的真实情景再说一遍,坛友们帮你把算法优化一下。
作者: doforyou    时间: 2025-8-13 13:10
怎么感觉像是买彩票选号的呢
作者: ohte    时间: 2025-8-13 13:30
在Excel中提取A列中4个不重复的随机数,可以使用以下公式组合:

方法1(适用于Office 365/2021):

excel
Copy Code
=INDEX(SORTBY(UNIQUE(A:A), RANDARRAY(COUNTA(UNIQUE(A:A)))), SEQUENCE(4))
方法2(通用版本):

excel
Copy Code
=INDEX(A:A, SMALL(IF(MATCH(A:A, A:A, 0)=ROW(A:A), ROW(A:A)), RANDBETWEEN(1, COUNTA(A:A)-ROW(A1)+1)))
(需按Ctrl+Shift+Enter作为数组公式输入,然后向下拖动填充4个单元格)

注意事项:

确保A列至少包含4个不重复的值
方法2每次计算会重新生成随机数
作者: djsh001    时间: 2025-8-13 14:58
向Excel高手学习。谢谢!
作者: qytjc    时间: 2025-8-13 15:07
这种问题,你放到EXCEL论坛,几分钟就有人解答了!
作者: 小龙飞    时间: 2025-8-13 15:51
不会 帮顶
作者: ppll2030    时间: 2025-8-13 17:31
我也来练练手,好久没玩了。

根据题目要求,数据在A、B两列,A列有效数据29行,B列有效数据7行,

(1)从A列中,随机提取不重复4个数值,并输出;
在D2单元格中输入公式:=TRANSPOSE(INDEX(A1:A29,TAKE(UNIQUE(RANDARRAY(20,1,1,29,TRUE)),4)))

(2)其次从B列中,随机提取一个数值,不能与上述D2:G2中提取的数值重复;
在H2单元格中输入公式:=INDEX(FILTER(B1:B7,COUNTIF(D2:G2,B1:B7)=0,""),RANDBETWEEN(1,ROWS(FILTER(B1:B7,COUNTIF(D2:G2,B1:B7)=0,""))))

解题完成。
作者: xshow15    时间: 2025-8-13 17:37
都是人才啊,太复杂了!
作者: my9823    时间: 2025-8-13 17:41
其实,直接问deepseek或者千文,它会自动给你写好。现在懒人都这么做。不过,等它生成函数,你先验证一下,有时候由于表达不清楚,ai会曲解你的意思。
作者: dura    时间: 2025-8-13 18:24
双色球

作者: yuping    时间: 2025-8-14 09:58
高手学习。谢谢
作者: wang1126    时间: 2025-8-14 10:11
谢谢楼主分享
作者: guong    时间: 2025-8-14 12:19
ppll2030 发表于 2025-8-13 17:31
我也来练练手,好久没玩了。

根据题目要求,数据在A、B两列,A列有效数据29行,B列有效数据7行 ...

来学习下
作者: ILOVEQQ    时间: 2025-8-14 14:17
太難了
作者: plezhong    时间: 7 天前
除了发论坛,也可以用AI生成,修整几次应该就出来了。
作者: hjdx001    时间: 昨天 20:59
高手来解决




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3