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

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对排序区域进行排序,其实整体可以采用录制宏来实现,做部分修改即可
  • Order1:=xlAscending采用升序
  • Header:=xlNo,没有标题
  • MatchCase:=False,不区分大小写排序
  • Orientation:=xlTopToBottom,指定排序方向
  • SortMethod:=xlPinYin,指定中文排序方法(官方)
  • xlPinYin (1) 按字符的汉语拼音顺序排序,这是默认值
  • xlStroke (2) 按每个字符的笔划数排序

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页