|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
这次代码少多了
- function 比赛抽签(){
- const game=Application.Caller().match(/\d+米/)[0];
- let sf=Range("k7").CurrentRegion.Value2.slice(1 ).reduce((sf,x,i,ar)=>{
- if (x[2]==null) x[2]=ar[i-1][2];
- return sf[x[1]]=x[2], sf;
- },{});
- let n=Math.ceil(Object.keys(sf).length/7)-1, res=[];
- for (let i=0;i<=n;i++){
- let count=Math.min(7,Object.keys(sf).length); //剩余未分组的队员数量
- for (let j=1;j<=count;j++){
- let temp=res[j]=res[j] || Array(n+1).fill([]);
- let dy=Object.entries(sf).filter(([a,b])=>!temp.some(([,s])=>s==b)); //排除同组队员省分
- if (dy.length==0) dy=Object.entries(sf);
- let k=Math.floor(Math.random()*dy.length); //随机号码
- temp[i]=[`${dy[k][0]}-${dy[k][1]}`,dy[k][1]];
- delete sf[dy[k][0]]; //删除已被抽中参赛队
- }
- }
- res=res.flat();
- Cells.Find(game).Offset(1,0).Resize(res.length,1).Value2=res;
- }
复制代码 |
|