Доброго времени суток! Уважаемые, подскажите пожалуйста, есть ли какой нибудь быстрый способ копирования содержимого ячейки из одной таблицы в другую? У меня есть две таблицы в одной 400000 записей, в другой 4000. Так же есть макрос: цикл который поочередно берет строку из таблицы где 4000 записей и ищет одинаковую запись в первой таблице, где 400000 записей, если находит одинаковую запись, берет и копирует из первой таблицы столбец 7,8,9 и вставляет во вторую таблицу в столбец 8,9,10. Все это у меня сделано через цикл For. Делает очень долго. Вопрос: есть ли какие нибудь быстрые способы?
вот собственно сам код:
Код
Sub poisk()
'ссылка на первый лист
Dim sheet1 As Worksheet
Set sheet1 = ActiveWorkbook.Sheets(1)
'ссылка на второй лист
Dim sheet2 As Worksheet
Set sheet2 = ActiveWorkbook.Sheets(2)
'строка для хранения идентификатора строки первой таблицы
Dim str1 As String
'строка для хранения идентификатора строки второй таблицы
Dim str2 As String
'позиция курсора (номер строки) в первой таблице
Dim i As Long
i = 2
Dim last_i As Long
last_i = 2
'позиция курсора (номер строки) в первой таблице
Dim j As Long
j = 3
Dim las_j As Long
last_j = 3
'определяем последнюю значимую строку первой таблицы (последняя строка в
первой колонке которой есть значение)
For Each Cell In sheet1.Range("A:A")
If Cell.Row > 2 Then
If Cell.Value > " " Then
last_i = Cell.Row
Else
Exit For
End If
End If
Next Cell
'определяем последнюю значимую строку второй таблицы (последняя строка в
первой колонке которой есть значение)
For Each Cell In sheet2.Range("A:A")
If Cell.Row > 2 Then
If Cell.Value > " " Then
last_j = Cell.Row
Else
Exit For
End If
End If
Next Cell
'пробегаем по строкам второй таблицы (внешний цикл)
For j = 3 To last_j
'определяем идентификатор текущей строки
str1 = sheet2.Cells(j, 1).Value & "-" & sheet2.Cells(j, 2).Value & "-" &
sheet2.Cells(j, 3).Value & "-" & sheet2.Cells(j, 4).Value & "-" &
sheet2.Cells(j, 5).Value & "-" & sheet2.Cells(j, 6).Value
'пробегаем по строкам первой таблицы (внешний цикл)
For i = 2 To last_i
'определяем идентификатор текущей строки
str2 = sheet1.Cells(i, 1).Value & "-" & sheet1.Cells(i, 2).Value & "-" &
sheet1.Cells(i, 3).Value & "-" & sheet1.Cells(i, 4).Value & "-" &
sheet1.Cells(i, 5).Value & "-" & sheet1.Cells(i, 6).Value
'сравниваем идентификаторы строк первой и второй таблицы
If str1 = str2 Then
'если совпадение найдено то записываем 7, 8, 9 из первой таблицы во
вторую в строку с соответствующей ему ФИО и Датой рождения
sheet2.Cells(j, 8).Value = sheet1.Cells(i, 7).Value
sheet2.Cells(j, 9).Value = sheet1.Cells(i, 8).Value
sheet2.Cells(j, 10).Value = sheet1.Cells(i, 9).Value
Exit For
'прекращаем внутренний цикл, переходим к следующей итерации внешнего
цикла (к следующей записи второй таблицы)
End If
Next i
Next j
End Sub