Excel表格选择出相同的数值

2025-10-16 23:04:40

1、打开Excel表格后,点击【开发工具】、【Visual Basic】打开VBA编辑器,或者使用【Alt+F11】组合键打开VBA编辑器。

Excel表格选择出相同的数值

2、在VBA编辑器的菜单栏上面点击【插入】、【模块】,或者依次按下键盘上面的【Alt】、【I】、【M】键插入代码模块。

Excel表格选择出相同的数值

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

Excel表格选择出相同的数值

4、回到Excel的工作表界面,将会看到程序的执行结果。

Excel表格选择出相同的数值

5、VBA程序思路解读:

(1)程序里面主要借用Excel表格COUNTIF函数进行统计判断,此时自然会占用到Excel表格上面的单元格,被占用的单元格不应该含有数据,以免被清空。

(2)动用到Excel表格的单元格作为中介时,应当先关闭Excel表格屏幕显示更新(即:Application.ScreenUpdating = False),之后再恢复,以提高VBA程序的运行效率。

(3)由于单元格里面的数值是被逗号分隔的,此时可以借助截取函数Mid、单元格字符长度函数Len、判断字符位置函数Instr等进行综合处理。

(4)使用Do……Loop循环时,应当避免死循环的出现。如果出现死循环,整个Excel工作表将会被卡死,此时需要强制关闭Excel表格再打开,可能会造成未保存的数据丢失。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢