ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用VBA编制羽毛球比赛赛程

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-31 11:32 | 显示全部楼层 |阅读模式
[backcolor=rgba(255, 255, 255, 0.86)]用于生成羽毛球比赛的赛程表。假设有3个组别,每个组别有4支队伍,比赛采用单循环制,共进行3轮比赛。

[backcolor=rgba(255, 255, 255, 0.86)]但是代码报错-缺少数组,请见附件。

羽毛球赛程.rar

15.49 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2023-5-31 11:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
建议增加参赛信息在表格内,然后再对数据进行处理。

TA的精华主题

TA的得分主题

发表于 2023-5-31 12:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-31 12:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-31 12:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png

运行结果:
image.png

TA的精华主题

TA的得分主题

发表于 2023-5-31 12:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. 'Option Explicit
  2. Sub Generate羽毛球比赛赛程表()
  3.     Dim teamNames As String, i As Integer, j As Integer, k As Integer
  4.     Dim matchDay As Integer, matchTime As String, matchTeam1 As String, matchTeam2 As String
  5.     Dim matchResult As String, matchWinner As String
  6.    
  7.     '输入参赛队伍名称
  8.     teamNames = InputBox("请输入参赛队伍名称(用空格分隔):")
  9.    
  10.     '将队伍名称转换为数组
  11.     Dim teamArray() As String
  12.     teamArray = Split(teamNames, " ")
  13.     Dim teamArrayLength As Integer
  14.     teamArrayLength = UBound(teamArray) + 1
  15.     '计算每轮比赛的场次和对手匹配情况
  16.     Dim roundCount As Integer, roundMatchCount As Integer
  17.     roundCount = 3
  18.     roundMatchCount = Int((teamArrayLength - 1) * (teamArrayLength - 2) / 2)
  19.    
  20.     '生成第一轮比赛的赛程表
  21.     k = 0
  22.     For i = 0 To UBound(teamArray)
  23.         For j = i + 1 To UBound(teamArray)
  24.             If teamArray(i) <> teamArray(j) Then
  25.                 matchDay = Int((i + j) * (i + j + 1) / 2) + k + 1
  26.                 matchTime = "9:00" & matchDay & " AM"
  27.                 matchTeam1 = teamArray(i) & " vs " & teamArray(j)
  28.                 matchTeam2 = teamArray(j) & " vs " & teamArray(i)
  29.                 matchResult = ""
  30.                 matchWinner = teamArray(i)
  31.                
  32.                 '检查是否已经进行了类似的比赛
  33.                 For l = k + 1 To roundMatchCount
  34.                     If matchTeam1 = teamArray(l Mod teamArrayLength) And matchTeam2 = teamArray((l \ teamArrayLength) Mod teamArrayLength) Then
  35.                         matchResult = "T" & l \ roundMatchCount & "" & teamArray(l Mod teamArrayLength) & _
  36.                             " vs " & teamArray((l \ teamArrayLength) Mod teamArrayLength) & "" & matchWinner _
  37.                             & "" & matchResult & "" & matchWinner & "" & matchResult & "" & matchWinner & "" _
  38.                             & matchResult & "" & matchWinner & "" & matchResult & "" & matchWinner & "" & matchResult & "" _
  39.                             & matchWinner & "" & matchResult & "" & matchWinner & "" & matchResult & "" & matchWinner & "" _
  40.                             & matchResult & "" & matchWinner & "" & matchResult & "" & matchWinner & "" & matchResult & "" _
  41.                             & matchWinner & "" & matchResult & "" & matchWinner & "" & matchResult & ""
  42.                         Exit For
  43.                     End If
  44.                 Next l
  45.                
  46.                 '输出比赛信息到Excel表格中
  47.                 Worksheets("Match Schedule").Cells(matchDay, 2).Value = matchTime
  48.                 Worksheets("Match Schedule").Cells(matchDay, 3).Value = matchTeam1
  49.                 Worksheets("Match Schedule").Cells(matchDay, 4).Value = matchTeam2
  50.                 Worksheets("Match Schedule").Cells(matchDay, 5).Value = matchResult
  51.                 Worksheets("Match Schedule").Cells(matchDay, 6).Value = matchWinner
  52.                 k = k + 1
  53.             End If
  54.         Next j
  55.         k = k + 1
  56.     Next i
  57.    
  58.     '输出第一轮比赛的赛程表到Excel表格中
  59.     MsgBox Worksheets("Match Schedule").Range("A1").CurrentRegion.Address, _
  60.         vbInformation, "第一轮比赛赛程表"
  61. End Sub


复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-31 12:19 | 显示全部楼层
羽毛球赛程.rar (19.5 KB, 下载次数: 13)

贴代码审核比较慢。

TA的精华主题

TA的得分主题

发表于 2023-5-31 13:54 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-31 14:56 | 显示全部楼层
边缘码农 发表于 2023-5-31 12:19
贴代码审核比较慢。

谢谢老师,对比了代码,看到修改了一小部分,已经能正常运行。

TA的精华主题

TA的得分主题

发表于 2023-5-31 21:20 | 显示全部楼层
是练习还是实际应用。我之前做过羽毛球比赛,不过做的不是很理想,一直想重做一次。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 16:23 , Processed in 0.038722 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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