Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Оксана Соколова от 24.10.2016, 20:51

Название: Объединение двух листов по общему значению
Отправлено: Оксана Соколова от 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
И т.д.
И таким образом обрабатывала всю информацию.
Помогите, пожалуйста, внести правки.
Спасибо!

Название: Re: Объединение двух листов по общему значению
Отправлено: boa от 07.11.2016, 19:12
Трудно понять логику макроса, т.к. он совсем не обрабатывает повторяющиеся значения, но исходя из поста, для ограничения цикла используйте только For i = 2 To 1000 или For i = 1001 To 2000
т.к. Sheets("Исходник 2").Range("A" & Rows.Count).End(xlUp).Row возвращает номер последней строки с данными
Название: Re: Объединение двух листов по общему значению
Отправлено: kuklp1 от 08.11.2016, 08:25
 И чтоб
Цитата: Оксана Соколова от 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
Название: Re: Объединение двух листов по общему значению
Отправлено: iron priest от 09.11.2016, 10:09
установить power query