Part 1:逻辑过程

  1. 首先对拟查找列排序
  2. 从第一行开始进行循环
  3. 每一行与其下面的行进行对比,直到找到不同的值,进入下一个值
  4. 记录有多少个相同的值,下一个循环从那个不同的值开始向下循环
  5. 直到最后一行
  6. 将重复值及重复次数记录下来
  7. 对于只出现一次的数值不做额外记录

原始数据

excelvba多条件查找指定数据(VBAExcel实例系列)(1)

Part 2:代码

Sub test() Set shtFirst = ThisWorkbook.Worksheets("查重") maxRow = shtFirst.Cells(Rows.Count, "A").End(xlUp).Row '先排序 Set Rng = shtFirst.Range("A1:A" & maxRow) Rng.Sort Key1:=shtFirst.Cells(1, "A"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal '重复值写入区域 shtFirst.Cells(1, "E") = "重复值" shtFirst.Cells(1, "F") = "重复次数" For i = 1 To maxRow Step 1 compareContent = shtFirst.Cells(i, "A") flagRepeat = 0 '记录重复值的区域 maxRowRepeat = shtFirst.Cells(Rows.Count, "E").End(xlUp).Row If maxRowRepeat < 2 Then inputRow = 2 Else inputRow = maxRowRepeat 1 End If '先写入 shtFirst.Cells(inputRow, "E") = compareContent shtFirst.Cells(inputRow, "F") = 1 For i2 = i 1 To maxRow Step 1 compareContentNext = shtFirst.Cells(i2, "A") If compareContentNext = compareContent Then '增加一次出现次数 flagRepeat = 1 '写入工作表 existRepeatCount = shtFirst.Cells(inputRow, "F") repeatCount = existRepeatCount 1 shtFirst.Cells(inputRow, "F") = repeatCount Else Exit For End If Next i2 i = i2 - 1 '无重复则删除 If flagRepeat = 0 Then shtFirst.Cells(inputRow, "E").Resize(1, 2) = "" End If Next i End Sub

执行结果

excelvba多条件查找指定数据(VBAExcel实例系列)(2)

Part 3:部分代码解读

Set Rng = shtFirst.Range("A1:A" & maxRow) Rng.Sort Key1:=shtFirst.Cells(1, "A"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal

  1. set Rng=确定欲排序区域
  2. sort对排序区域进行排序,其实整体可以采用录制宏来实现,做部分修改即可

思考:多列值相同才判定为重复怎么办?如何找到重复值

,