Объединение двух листов по общему значению

Автор Оксана Соколова, 24.10.2016, 20:51

« назад - далее »

Оксана Соколова

Всем привет!
Есть у меня такой макрос (см. вложение). Около года назад мне его помог сделать на этом форуме один хороший человек.
Проблема в том, что использую его в работе с большим количеством строк. Бывает, что в итоге финальная таблица больше миллиона строк, поэтому появлялась ошибка.
Коллега по работе помог мне.
Ограничил мне количество строк 1000, кажется в этой строке:
For i = 2 To Sheets("Исходник 2").Range("A" & Rows.Count).End(xlUp).Row
Файл был потерян, коллега уволился, а я воспроизвести не могу(((
Было как-то так:
For i = 2 To 1000 Sheets("Исходник 2").Range("A" & Rows.Count).End(xlUp).Row
Но сейчас не работает, что-то не так я делаю.

Потом я делала:
For i = 1001 To 2000 Sheets("Исходник 2").Range("A" & Rows.Count).End(xlUp).Row
И т.д.
И таким образом обрабатывала всю информацию.
Помогите, пожалуйста, внести правки.
Спасибо!


boa

Трудно понять логику макроса, т.к. он совсем не обрабатывает повторяющиеся значения, но исходя из поста, для ограничения цикла используйте только For i = 2 To 1000 или For i = 1001 To 2000
т.к. Sheets("Исходник 2").Range("A" & Rows.Count).End(xlUp).Row возвращает номер последней строки с данными
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

kuklp1

 И чтоб
Цитата: Оксана Соколова от 24.10.2016, 20:51.. в итоге финальная таблица больше миллиона строк...
нужно чтоб в исходных таблицах в сумме было больше миллиона, а это невозможно в xls, где строк на листе 65536. Может Вы пытаетесь обработать файлы xlsx? Попробуйте так:
Sub www()
    Dim i&, j&, sh As Worksheet
    sz = 2: Set sh = Sheets("Результат")
    For i = 2 To Sheets("Исходник 2").Range("A" & Rows.Count).End(xlUp).Row
        For j = 2 To Sheets("Исходник 1").Range("A" & Rows.Count).End(xlUp).Row
            If Sheets("Исходник 1").Cells(j, 1) = Sheets("Исходник 2").Cells(i, 1) Then
                sh.Cells(sz, 1) = Sheets("Исходник 2").Cells(i, 1)
                sh.Cells(sz, 2) = Sheets("Исходник 2").Cells(i, 2)
                sh.Cells(sz, 3) = Sheets("Исходник 1").Cells(j, 2)
                sz = sz + 1
                If sz > 65535 Then' если все же xlsx то 1000000
                    Worksheets.Add
                    Set sh = ActiveSheet
                    sz = 2
                    sh.[a1:c1] = Array("Город", "Код Уб", "Код ТТ")
                End If
            End If
        Next j
    Next i
End Sub
Я, как всегда, чертовски адекватен... Email: kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728, E332314026771

iron priest