Excel表格选择出相同的数值
1、打开Excel表格后,点击【开发工具】、【Visual Basic】打开VBA编辑器,或者使用【Alt+F11】组合键打开VBA编辑器。
2、在VBA编辑器的菜单栏上面点击【插入】、【模块】,或者依次按下键盘上面的【Alt】、【I】、【M】键插入代码模块。
3、在模块代码窗口里面输入以下VBA程序代码,之后点击功能区里面的“运行”图标运行程序,或者直接按下【F5】键运行程序。Sub NumberSelect()Dim h, c, i1, i2, i3, i4, i5, i6, i7, i8On Error Resume Next '忽略运行过程中可能出现的错误Application.ScreenUpdating = False '关闭Excel表格显示更新Set mysheet1 = ThisWorkbook.Worksheets("Sheet1") '定义工作表mysheet1.Range("C2:E1000") = ""For h = 2 To 1000 '从第2行到第1000行For c = 1 To 2 '从第1列到第2列 If mysheet1.Cells(h, c) <> "" Then '如果单元格不是空白,则 i1 = 0 'i1初始化为0 i3 = Len(mysheet1.Cells(h, c)) '获取单元格字符长度 i4 = 0 i10 = 0 Do i1 = i1 + 1 '每执行一次,递增1;也是累计单元格里面含有多少个数值 i2 = i4 '把上一次逗号的位置赋给i2 i4 = InStr(i2 + 1, mysheet1.Cells(h, c), ",") '获取单元格里面逗号的位置 If i4 = 0 Then '如果找不到逗号(,),则 i5 = i3 - i2 '计算字符个数 Else i5 = i4 - i2 - 1 End If mysheet1.Cells(i1 + 1, c + 3) = Mid(mysheet1.Cells(h, c), i2 + 1, i5) '截取单元格里面的数值 If i1 >= 20000 Or i4 = 0 Then '如果循环次数超过2万或已经找不到逗号(,),则退出循环 Exit Do End If Loop End IfNextFor i6 = 1 To i1i8 = Application.WorksheetFunction.CountIf(mysheet1.Range("E2:E1000"), mysheet1.Cells(i6 + 1, 5))If i8 > 1 Then '同一单元格里面存在相同的值时只记1个 mysheet1.Cells(i6 + 1, 5) = ""End Ifi7 = Application.WorksheetFunction.CountIf(mysheet1.Range("D2:D1000"), mysheet1.Cells(i6 + 1, 5))If i7 >= 1 Then '统计出的单元格相同个数大于等于1,则 If mysheet1.Cells(h, 3) = "" Then '第三列对应的单元格填入存在相同的数值 mysheet1.Cells(h, 3) = mysheet1.Cells(i6 + 1, 5) Else mysheet1.Cells(h, 3) = mysheet1.Cells(h, 3) & "," & mysheet1.Cells(i6 + 1, 5) End If End IfNextmysheet1.Range("D2:E1000") = "" '清空单元格NextApplication.ScreenUpdating = True '恢复Excel表格显示更新End Sub
4、回到Excel的工作表界面,将会看到程序的执行结果。
5、VBA程序思路解读:(1)程序里面主要借用Excel表格COUNTIF函数进行蕙蝤叼翕统计判断,此时自然会占用到Excel表格上面的单元格,被占用的单元格不应该含有数据,以免被清空。(2)动用到Excel表格的单元格作为中介时,应当先关闭Excel表格屏幕显示更新(即:Application.ScreenUpdating = False),之后再恢复,以提高VBA程序的运行效率。(3)由于单元格里面的数值是被逗号分隔的,此时可以借助截取函数Mid、单元格字符长度函数Len、判断字符位置函数Instr等进行综合处理。(4)使用Do……Loop循环时,应当避免死循环的出现。如果出现死循环,整个Excel工作表将会被卡死,此时需要强制关闭Excel表格再打开,可能会造成未保存的数据丢失。