excelvba多条件查找指定数据(VBAExcel实例系列)
Part 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
执行结果
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
- set Rng=确定欲排序区域
- sort对排序区域进行排序,其实整体可以采用录制宏来实现,做部分修改即可
- Order1:=xlAscending采用升序
- Header:=xlNo,没有标题
- MatchCase:=False,不区分大小写排序
- Orientation:=xlTopToBottom,指定排序方向
- SortMethod:=xlPinYin,指定中文排序方法(官方)
- xlPinYin (1) 按字符的汉语拼音顺序排序,这是默认值
- xlStroke (2) 按每个字符的笔划数排序
思考:多列值相同才判定为重复怎么办?如何找到重复值
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com