Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5077|回复: 27

[已解决]请教一段代码,好象难了点

  [复制链接]
发表于 2011-10-27 12:24 | 显示全部楼层 |阅读模式
求一段羽毛球比赛随机抽签形成的对阵代码
要求1:同一学校的同学不对阵比赛
要求2:如果报名人数增加或减少,代码仍然可用。
详见附件,谢谢。
最佳答案
2011-10-30 08:57
本帖最后由 zjdh 于 2011-10-30 09:28 编辑

不死循环的办法想出来了:
  1. Sub TEST()
  2.     Dim ARR, BRR(), I%, T%, R%, N%, M%
  3.     Columns("C:D").ClearContents
  4.     ARR = Sheets(2).Range("A2:C" & Sheets(2).Range("A65536").End(3).Row)
  5.     N = UBound(ARR)
  6.     For I = 1 To N Step 2
  7.         T = T + 1
  8. 10      R = Int(Rnd() * N + 1)
  9.         If ARR(R, 3) <> "" Then GoTo 10
  10.         Cells(T * 3 + 2, 4) = ARR(R, 1)
  11.         Cells(T * 3 + 2, 3) = ARR(R, 2)
  12.         ARR(R, 3) = 1
  13. 20      R = Int(Rnd() * N + 1)
  14.         If (ARR(R, 3) <> "" Or ARR(R, 2) = Cells(T * 3 + 2, 3)) Then
  15.             M = M + 1
  16.             If M = 100 Then M = 0: TEST '超过100次死循环重来
  17.             GoTo 20
  18.         End If
  19.         M = 0
  20.         Cells(T * 3 + 3, 4) = ARR(R, 1)
  21.         Cells(T * 3 + 3, 3) = ARR(R, 2)
  22.         ARR(R, 3) = 1
  23.     Next
  24. End Sub
复制代码

体育比赛.rar

8.67 KB, 下载次数: 44

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-10-27 15:26 | 显示全部楼层
本帖最后由 zjdh 于 2011-10-27 15:33 编辑

你试试:
比赛抽签.rar (11.89 KB, 下载次数: 59)
回复

使用道具 举报

发表于 2011-10-27 16:26 | 显示全部楼层
这问题有代表性,来学习。

zjdh的,我连续点,到第7次时就死了,是我的问题么?
回复

使用道具 举报

 楼主| 发表于 2011-10-27 19:14 | 显示全部楼层
回复 zjdh 的帖子

谢谢zjdh。不过3楼说的确实是个问题,点第7次时总死机,望新解。
回复

使用道具 举报

发表于 2011-10-27 20:12 | 显示全部楼层
本帖最后由 zjdh 于 2011-10-27 22:05 编辑

果然如此,主要是最后一对出现随机数重复相同,无法获得最后一个序号,不知何故,现已作特殊处理。
比赛抽签2.rar (12.29 KB, 下载次数: 29)
回复

使用道具 举报

 楼主| 发表于 2011-10-27 21:51 | 显示全部楼层
回复 zjdh 的帖子

再次感谢zjdh的指点,我对修改的代码进行测试,确实解决了死机的问题,但产生了新问题——多点几次按钮,就会出现同一个学校的学生出现在同一组对阵的情况。再请zjdh前辈再看看。
另外,ARR改成数组,会不会更好点?
回复

使用道具 举报

发表于 2011-10-27 21:53 | 显示全部楼层
我再看看
ARR本来就是数组!
回复

使用道具 举报

发表于 2011-10-27 22:05 | 显示全部楼层
确实还是最后一组,现已修改,5楼附件已更新!
回复

使用道具 举报

 楼主| 发表于 2011-10-28 06:38 | 显示全部楼层
回复 zjdh 的帖子

再谢zjdh,让您费心了!
经您修改,确实短时间内不会再出现对阵冲突的现象。
由于这是抽签,我就做了一个循环,让数据一直在动,这样更形象一些。
但我发现,当TEST运行的次数很多时,又会出现死机,不知是由于出现了对阵冲突,还是我的循环本身有问题,再请您给诊断一下,谢谢。 数据滚动.rar (12.1 KB, 下载次数: 11)
回复

使用道具 举报

发表于 2011-10-28 07:54 | 显示全部楼层
本帖最后由 zjdh 于 2011-10-28 07:56 编辑

循环没问题,那是出现了最后2组4人都是一个学校时,系统进入死循环。
因此得考虑另一种方法抽签了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 19:27 , Processed in 1.424614 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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