На вопрос легко ответить, проблема состоит из двух частей.
- Как быстро работает ваш компьютер?
- Как часто вам нужно запускать этот код?
Причина, по которой я задаю эти вопросы, заключается в том, что любой код выполняется на 50 000 строк независимо от того, насколько мал код, чтобы сделать этот кодработа ... вам нужен достаточно надежный компьютер, в противном случае этот код остановит ваш компьютер или, по крайней мере, преуспеет от хорошей минуты до трех минут + в зависимости от того, насколько быстро и сколько у вас памяти на самом деле.
Не видя свою книгу, вам нужны очень простые формулы, но вам нужно добавить еще одну строку в книгу.В столбце P вам нужна формула проверки.Эта формула проста, но она будет зависеть от того, сколько точек отсчета вам требуется.
=COUNTIFS('Sheet2'!$A:$A,$A3,'Sheet2'!$E:$E,$E3)
Оттуда вы можете увидеть, что является дубликатами или нет.Затем в столбце Q вы можете получить следующую формулу:
=IF($P3,"SAME","")
И она сообщит вам, совпадают ли данные или нет.По сути, он говорит, что если в ячейке P3 есть что-то, кроме 0, то будет сказано, что есть что-то такое же, в противном случае это не так.
Оттуда вам нужен код вроде этого:
Sub Update_TNOOR()
Dim wsS1 As Worksheet
Dim wsS2 As Worksheet
Dim lastrow As Long, fstcell As Long
Set wsS1 = Sheets("Sheet1")
Set wsS2 = Sheets("Sheet2")
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
End With
With wsS1
wsS1.Columns("P:Q").ClearContents
ThisWorkbook.Sheets("Sheet1").Cells(1, 16).Value = “=COUNTIFS('Sheet2'!$A:$A,$A3,'Sheet2'!$E:$E,$E3)"
ThisWorkbook.Sheets("Sheet1").Cells(1, 17).Value = “=IF($P3,"Same",””””)"
wsS2.Columns("P:Q").ClearContents
ThisWorkbook.Sheets("Sheet2").Cells(1, 16).Value = “=COUNTIFS('Sheet1'!$A:$A,$A3,'Sheet1'!$E:$E,$E3)"
ThisWorkbook.Sheets("Sheet2").Cells(1, 17).Value = “=IF($P3,"Same",”Different”)"
End With
With Intersect(wsS1, wsS1.Columns("Q"))
.AutoFilter 1, "<>Same"
With Intersect(.Offset(2).EntireRow, .Parent.Range("B:Q"))
.EntireRow.Delete
End With
.AutoFilter
End With
'Blow away rows that are useless
lastrow = wsS2.Range("A2").End(xlDown).Row
wsS2.Range("P1:Q1").Copy wsS2.Range("P2:Q" & lastrow)
With Intersect(wsS2.UsedRange, wsS2.Columns("Q"))
wsS2.Range("P:Q").Calculate
.AutoFilter 1, "<>Different"
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
With wsS2
lastrow = wsS2.Range("A1").End(xlDown).Row
Intersect(.UsedRange, .Range("A1:N" & lastrow)).Copy wsS1.Cells(Rows.Count, "B").End(xlUp).Offset(1)
End With
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
End With
End Sub
это должно помочь вам ... если я прочитаю то, что вы пытаетесь сделать правильно.
Однако, как говорили люди, то, что вы хотите сделать, может быть сделано в Excel, если я не знаю ... Кажется, что люди здесь думают, что нет, но если вам нужно использовать Excel, это должночтобы вы пошли.
Опять же, я не знаю, как выглядит ваша книга, поэтому я надеюсь, что это поможет.Это сравнивает данные и объединяет их в первый лист.ЭТО не сделает все, что вы хотите сделать ... но это должно помочь вам.