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, i8
On 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 If
Next
For i6 = 1 To i1
i8 = Application.WorksheetFunction.CountIf(mysheet1.Range("E2:E1000"), mysheet1.Cells(i6 + 1, 5))
If i8 > 1 Then '同一单元格里面存在相同的值时只记1个
mysheet1.Cells(i6 + 1, 5) = ""
End If
i7 = 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 If
Next
mysheet1.Range("D2:E1000") = "" '清空单元格
Next
Application.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表格再打开,可能会造成未保存的数据丢失。