Я бы не стал использовать циклы, подобные описанным выше, но лучше использовать SQL
Option Explicit
Sub SQL()
' from https://stackoverflow.com/questions/19755396/performing-sql-queries-on-an-excel-table-within-a-workbook-with-vba-macro
' by Joan-Diego Rodriguez
' get where we are and setup strings
Dim strFile As String, strCon As String
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
' set up for ADO
Dim cn As ADODB.Connection, rs As ADODB.Recordset, strSQL As String
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
' create SQL and open it
strSQL = ""
strSQL = strSQL & "SELECT * FROM [filteredData$] "
strSQL = strSQL & " Where PhoneNum In "
strSQL = strSQL & " (Select PhoneNum FROM [filteredData$] "
strSQL = strSQL & " Group By PhoneNum "
strSQL = strSQL & " Having Count(*) > 1"
strSQL = strSQL & " )"
strSQL = strSQL & " " ' maybe have an order by here
rs.Open strSQL, cn
'Debug.Print rs.Name, rs.PhoneNum
Dim nRow As Long
nRow = 1
Worksheets("phoneFlags").Activate
Cells(nRow, "A") = "Name": Cells(nRow, "B") = "PhoneNum": Cells(nRow, "C") = "EMail"
Do While Not rs.EOF
nRow = nRow + 1
Cells(nRow, "A") = rs.Fields(0): Cells(nRow, "B") = rs.Fields(1): Cells(nRow, "C") = rs.Fields(2)
rs.movenext
Loop
End Sub
Находясь в представлении / макросах, в верхней строке меню, где отображается окно редактирования файла ...
Нажмите TOOLS, а затем нажмите Ссылки
Прокрутите вниз до объектов данных Microsoft ActiveX и выберите последний с галочкой
... Измените эту строку с новыми подписками на (0)(1) (2)
Ячейки (nRow, "A") = rs.Fields (0): Ячейки (nRow, "B") = rs.Fields (1): Ячейки (nRow, "C") = rs.Fields (2)