ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: xukunpeng88888

[求助] 请大神帮写一个平均分班的VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-27 12:38 | 显示全部楼层
试试,jsa。。。。。。

阳光分班.rar

28.7 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-8-27 16:53 | 显示全部楼层
Ramda的写法.
阳光分班(调用Ramda库).png

阳光分班(调用Ramda库).rar

153.59 KB, 下载次数: 0

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-27 17:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-28 00:00 | 显示全部楼层
xukunpeng88888 发表于 2024-8-27 09:21
感谢大佬,可能我没说明白,不是要班内男女生差距不能大于1,是各班级之间的男生差不能大于1,女生差也不 ...

换个简单的逻辑重写一下——


微信截图_20240827235833.png


240827_阳光分班.rar

73.85 KB, 下载次数: 4

用WPS打开并启用宏

TA的精华主题

TA的得分主题

发表于 2024-8-28 08:42 | 显示全部楼层
JSA练习一下

阳光分班.rar

51.48 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-8-28 08:47 | 显示全部楼层
  1. function spp(){
  2.         Application.DisplayAlerts=false;
  3.         Application.ScreenUpdating=false;
  4.         for(shtt of Sheets){
  5.                 if(shtt.Name !=Sheets(1).Name) shtt.Delete()
  6.         }
  7.         date=Range(`a1`).CurrentRegion();
  8.         arr=date.slice(1);
  9.         bj=Range(`f1`).Value2;
  10.         var boy=[],girl=[];
  11. //按性别分组并分配随机数
  12.         arr.map(v=>{
  13.                 num=Math.random()*10000;
  14.                 v[2]==`男` ? boy.push([...v,num]) :girl.push([...v,num]);
  15.         });
  16. //计算每个班男女平均人数及余数
  17.         boy_avr=Math.floor(boy.length/bj);
  18.         mod_boy=boy.length % boy_avr;
  19.         girl_avr=Math.floor(girl.length/bj);
  20.         mod_girl=girl.length % girl_avr;
  21.         brr=[];
  22. //生成班级序号及每班男女人数
  23.         for(i=1;i<=bj;i++){
  24.                 brr.push([i,boy_avr,girl_avr]);
  25.         };
  26. //分配男生剩余人数
  27.         i2=0;
  28.         do {
  29.                 brr[i2][1]++;
  30.                 i2++;
  31.                 mod_boy--;
  32.         } while(mod_boy>0);
  33. //分配女生剩余人数
  34.         i2=brr.length-1;
  35.         do {
  36.                 brr[i2][2]++;
  37.                 i2--;
  38.                 mod_girl--;
  39.         } while(mod_girl>0);
  40. //男女分组排序
  41.         boy.sort((a,b)=>a[3]-b[3]);
  42.         girl.sort((a,b)=>a[3]-b[3]);
  43. //按班级男女人数表分配学生
  44.         brr.map(v=>{
  45.                 var [bj,boy_count,girl_count]=v;
  46.                 stu=boy.splice(0,boy_count).concat(girl.splice(0,girl_count));
  47.                 stu.map(vv2=>vv2.pop());
  48.                 stu.sort((a,b)=>a[0]-b[0]).unshift(...date.slice(0,1));
  49.                 sht=Worksheets.Add(undefined,Sheets(Sheets.Count));
  50.                 sht.Name=`${bj}班`;
  51.                 sht.Range(`a1`).Resize(stu.length,stu[0].length).Value2=stu;
  52.                 sht.UsedRange.Borders.LineStyle=1;
  53.                 sht.Columns.AutoFit();
  54.         });
  55.         Application.ScreenUpdating=true;
  56.         Application.DisplayAlerts=true;
  57.         alert(`分班完毕!!!`);
  58. };
复制代码

TA的精华主题

TA的得分主题

发表于 2024-8-29 14:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-29 16:30 | 显示全部楼层
xd3210 发表于 2024-8-29 14:25
stu.map(vv2=>vv2.pop());这句的作用是什么?

把分配的随机数删除

TA的精华主题

TA的得分主题

发表于 2024-8-30 08:38 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-20 01:11 , Processed in 0.047184 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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