Эти две строки делают одно и то же
Dim i, total, fRow As Integer
Dim i As Variant, total As Variant, fRow As Integer
Похоже, он всегда оценивается как "1", если только Column A
не имеет пустых ячеек, так как функционирует ваша For
петля
`total = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row`
Find
возвращает только первое совпадение
`Set found = Worksheets(2).Columns("C:C").Find(what:=answer1)`
Не похоже, что вы ищете уникальные значения,В ваших образцах данных «Фамилия» указана в Column C
, а «Мосс» появляется в разное время в Shhet1
, но ваша функция Find
вернет только первое вхождение «Мосс» в Sheet2
.Это означает, что первый «Мох» в Sheet2
будет записан для каждого «Мха» в Sheet1
.Так что вы получаете ложные срабатывания и плохие совпадения.Это видно из вашего вывода: вы не предоставили образец Sheet2
, но я знаю, что первое появление слова «Мосс» - это «Номер задания 13774» в «18.12.2008», потому что оно записано несколько раз в Sheet1
.Чтобы решить эту проблему, используйте Find
с уникальными значениями или найдите каждое совпадение и сравните даты, номера заданий и т. Д., Пока не получите правильное значение.
Вы прошли квалификацию своих диапазоновдо уровня листа, но Rows.Count
не является квалифицированным.
Этот блок может быть сокращен до одной строки
`Worksheets(1).Range("I" & i).Value = Worksheets(2).Range("A" & fRow).Value`
`Worksheets(1).Range("J" & i).Value = Worksheets(2).Range("B" & fRow).Value`
`Worksheets(1).Range("K" & i).Value = Worksheets(2).Range("C" & fRow).Value`
`Worksheets(1).Range("L" & i).Value = Worksheets(2).Range("D" & fRow).Value`
`Worksheets(1).Range("M" & i).Value = Worksheets(2).Range("E" & fRow).Value`
`Worksheets(1).Range("N" & i).Value = Worksheets(2).Range("F" & fRow).Value`
`Worksheets(1).Range("O" & i).Value = Worksheets(2).Range("G" & fRow).Value`
Worksheets(1).Range("I" & i ":O" & i) = Worksheets(2).Range("A" & fRow & ":G" & fRow)