EP08. “Remove Duplicates 移除重复数字”
🔒 登录后可标记已读- 这篇教怎么用双层循环加一个布尔(Boolean)标志变量,把 A 列 10 个数字里的重复值挑掉,只把不重复的数字放进 B 列
- 前置知识:双层循环和
If Then判断 - 学完能理解「用一个开关变量标记状态」这个很常用的编程手法
- 也是 Excel 内建"删除重复项"功能背后的基本原理
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整 VBA 代码
Dim toAdd As Boolean, uniqueNumbers As Integer, i As Integer, j As Integer
Cells(1, 2).Value = Cells(1, 1).Value
uniqueNumbers = 1
toAdd = True
For i = 2 To 10
For j = 1 To uniqueNumbers
If Cells(i, 1).Value = Cells(j, 2).Value Then
toAdd = False
End If
Next j
If toAdd = True Then
Cells(uniqueNumbers + 1, 2).Value = Cells(i, 1).Value
uniqueNumbers = uniqueNumbers + 1
End If
toAdd = True
Next i
代码说明
- 声明
toAdd(布尔开关,标记「这个数字要不要被加进去」)、uniqueNumbers(目前已收集到几个不重复数字)、i、j(循环计数器) - 先把 A 列第一个数字直接复制到 B 列第一格,因为第一个数字必然是不重复的,
uniqueNumbers设成 1 - 外层循环
For i = 2 To 10从第 2 个数字开始逐一检查(第 1 个已经处理过了) - 内层循环
For j = 1 To uniqueNumbers拿当前数字(Cells(i, 1))跟 B 列目前已收集的每一个不重复数字比对,只要找到相同的,就把toAdd设成False - 内层循环结束后,如果
toAdd还是True(表示跟已收集的数字都不重复),就把这个数字加进 B 列,uniqueNumbers加 1 - 每处理完一个数字(不管有没有加进去),都把
toAdd重设回True,让下一轮循环重新判断——这一步很关键,不重设的话上一轮的判断结果会一直延续下去,后面的数字永远加不进去
怎么运行
在 A1:A10 输入 10 个数字(含重复),Alt + F11 打开 VBA 编辑器执行代码(或点命令按钮),B 列会显示去重后的结果。
学完你会
- ✅ 会用布尔开关变量标记「这个值要不要被加进去」
- ✅ 理解为什么每轮循环结束都要把开关重设回
True - ✅ 会用「已收集数量」而不是写死的范围当内层循环的上限
常见错误
- 忘记在每轮外层循环结束前把
toAdd重设回True,会导致一旦某个数字被判定为重复,后面所有数字都会被误判成重复,B 列不会再增加任何新值 - 内层循环范围要用
1 To uniqueNumbers(只跟"已经收集到的"数字比较),而不是固定1 To 10——如果写死成 10,会拿还没处理过的、值是 0 或空的单元格来比较,判断会出错 - 循环范围写死是 10 行,数据超过或不足 10 行时程序不会自动适应,需要手动调整上限或改成动态抓取最后一行
Sources
Blog / Website: