EP10. “Possible Football Matches 列出所有可能对阵组合”
🔒 登录后可标记已读- 这篇用双层循环列出一份球队清单里所有「两两配对」的可能对阵组合(比如 A 对 B、A 对 C、B 对 C,但不会重复列出 B 对 A)
- 前置知识:EP06 冒泡排序里用到的双层循环和
CurrentRegion - 学完能理解「内层循环从
i + 1开始」这个避免重复配对、避免自己对自己的经典写法 - 也能套用在排班表、比赛赛程这类需要列出两两组合的场景
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整 VBA 代码
Dim rng As Range, matchname As String, counter As Integer, i As Integer, j As Integer
Set rng = Range("A1").CurrentRegion
counter = 0
Worksheets(1).Columns(3) = ""
For i = 1 To rng.Count
For j = i + 1 To rng.Count
matchname = rng.Cells(i).Value & " vs " & rng.Cells(j).Value
Cells(counter + 1, 3).Value = matchname
counter = counter + 1
Next j
Next i
ActiveSheet.Columns(3).PrintPreview
代码说明
- 声明
rng(球队清单范围)、matchname(拼出来的对阵字符串)、counter(已写入的对阵组合数)、i、j(双层循环计数器) Set rng = Range("A1").CurrentRegion自动抓取 A1 所在的连续数据区域(整份球队清单),不管清单有几支球队都能自动适应Worksheets(1).Columns(3) = ""先清空第 3 列(C 列),准备写入这次的对阵结果- 外层循环
i从 1 到球队总数,内层循环j从i + 1开始(不是从 1 开始)——这样能保证每对球队只会被组合一次,也不会出现「球队自己对自己」的情况 matchname = rng.Cells(i).Value & " vs " & rng.Cells(j).Value用&把两支球队名字拼成 "球队A vs 球队B" 的字符串- 把拼好的对阵写入 C 列的第
counter + 1行,counter加 1,让下一组对阵往下一行写 - 双层循环跑完后,用
ActiveSheet.Columns(3).PrintPreview直接打开 C 列的打印预览,方便查看/打印完整对阵表
怎么运行
在 A 列从 A1 开始输入一份球队名单(比如 "Kickers"、"Shooters"、"Little Giants"),Alt + F11 打开 VBA 编辑器执行代码(或点命令按钮),C 列会列出所有球队两两配对的组合(例如 "Kickers vs Shooters"),并自动弹出打印预览。教程建议手动把 C 列文字居中,打印预览效果会更整齐。
[截图:宏运行完成后自动弹出的 Print Preview 打印预览窗口,显示 C 列列出的所有对阵组合]
学完你会
- ✅ 会用内层循环从
i + 1开始,避免重复配对和自己对自己 - ✅ 会用
&把两个值拼成一句描述性字符串 - ✅ 会用
CurrentRegion让代码自动适应清单长度,不用写死行数
常见错误
- 内层循环如果写成
For j = 1 To rng.Count(从 1 开始而不是i + 1),会重复列出"A vs B"和"B vs A"这种本质相同的对阵,也会多出"A vs A"这种无意义的自我配对 PrintPreview会直接打开打印预览窗口,如果只是想看结果不想预览打印,可以把这行删掉或注释掉- 球队清单如果不是从 A1 开始的连续区域(中间有空行、或从别的单元格开始),
CurrentRegion抓到的范围会不符合预期,抓漏或抓多球队
Sources
Blog / Website: