ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 414|回复: 27

[求助] 求助:分组抽签

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-12 13:05 | 显示全部楼层 |阅读模式


求助VBA方案:
1、体育比赛预赛分组,来自9个省的共25名队员分7个小组(第1-5组各4名队员,第6、7组为3名队员),但有7省各有3名队员,2个省各有2名队员。请设计一个抽签方案,尽量让同省的队员不在同1小组。
2、希望做一个随机抽签的系统,点“100米抽签”的按钮,将绿色处的25支队按上述的要求随机地填入黄色处100米的分组处,点“200米抽签”和“300米抽签”按键,也分别将队名填入到相应的分组表中去。
3、原则就是同一个项目的分组尽量将同一个省份的队伍分开,即使有,也最多是两人,而且让有同一省份的组数达到最少。
4、不知道VBA是否可以实现?

具体见附件

谢谢了。

同城分开抽签.zip

9.88 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2024-6-12 14:44 | 显示全部楼层
这个抽签不是要现场派代表抽吗,或者像重大足球国际赛事那样,直播抽签的全部过程,直接用抽签程序来抽签,别人怕不是怀疑有猫腻

TA的精华主题

TA的得分主题

发表于 2024-6-12 16:44 来自手机 | 显示全部楼层
https://club.excelhome.net/forum.php?mod=viewthread&tid=1694607&extra=&mobile=

TA的精华主题

TA的得分主题

发表于 2024-6-12 16:53 | 显示全部楼层
请用wps测试。。。。。。
360截图20240612165154838.jpg
360截图20240612165226068.jpg

同城分开抽签.zip

12.42 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2024-6-12 17:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实用性很强的需求,不错

TA的精华主题

TA的得分主题

发表于 2024-6-12 18:04 | 显示全部楼层
同城分开抽签.zip (21.26 KB, 下载次数: 9)

office测试版参考

TA的精华主题

TA的得分主题

发表于 2024-6-12 18:35 来自手机 | 显示全部楼层
LIUZHU 发表于 2024-6-12 14:44
这个抽签不是要现场派代表抽吗,或者像重大足球国际赛事那样,直播抽签的全部过程,直接用抽签程序来抽签, ...

是的,一般都是手动,越原始越可信

TA的精华主题

TA的得分主题

发表于 2024-6-12 19:25 | 显示全部楼层
25名队员,分成7个组,怎么是4+4+4+4+4+3+3的组合,这就有26人了啊,应该是4+4+4+4+3+3+3的组合

TA的精华主题

TA的得分主题

发表于 2024-6-12 20:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-12 20:09 | 显示全部楼层
JS代码,供参考
  1. function 抽签100米(){
  2.         let rng=Cells.Find("100米");
  3.         比赛抽签(rng);
  4. }
  5. function 抽签200米(){
  6.         let rng=Cells.Find("200米");
  7.         比赛抽签(rng);
  8. }
  9. function 抽签300米(){
  10.         let rng=Cells.Find("300米");
  11.         比赛抽签(rng);
  12. }
  13. function 比赛抽签(rng){
  14.         let sf=Range("k7").CurrentRegion.Value2.slice(1 ).reduce((sf,x,i,ar)=>{
  15.                 if (x[2]==null) x[2]=ar[i-1][2];
  16.                 return sf[x[1]]=x[2], sf;
  17.         },{});
  18.         let n=Math.ceil(Object.keys(sf).length/7), obj={}, dic={};
  19.         for (let i=0;i<=n-1;i++){
  20.                 let count=Math.min(7,Object.keys(sf).length);                        //剩余未分组的队员数量
  21.                 for (j=1;j<=count;j++){
  22.                         let temp1=obj[j]=obj[j] || Array(n).fill([""]);                //二维数组
  23.                         let temp2=dic[j]=dic[j] || [];                //记录本组参赛队所属省分
  24.                         let dy=Object.entries(sf).filter(([a,b])=>!temp2.includes(b));
  25.                         if (dy.length==0) dy=Object.entries(sf);
  26.                         let k=Math.floor(Math.random()*dy.length);                //随机号码
  27.                         temp1[i]=[dy[k][0]], temp2.push(dy[k][1]);
  28.                         delete sf[dy[k][0]];                                                        //删除已被抽中参赛队
  29.                 }
  30.         }
  31.         let res=Object.values(obj).flat();
  32.         rng.Offset(1,0).Resize(res.length,res[0].length).Value2=res;
  33. }
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-18 20:00 , Processed in 0.036438 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表