Мт.
Я играл с вашим макросом и фиктивным набором данных, похожим на ваш.
Я сделал несколько изменений в вашем коде, которые позволили мне получить результат, который вы ищете:
Private Sub finddata()
'Dim stock As Integer
Dim finalrow As Integer
Dim i As Integer
'Modified:
finalrow = Sheet1.Range("H1").End(xlDown).Row
For i = 2 To finalrow - 1
For j = 3 To finalrow
stock = Sheet1.Cells(j, 8).Value
If Cells(i, 8) = stock Then
Range(Cells(i, 9), Cells(i, 13)).Copy
'Modified line:
Sheet1.Range("I" & j & ":M" & j).PasteSpecial Paste:=xlPasteValues
End If
Next j
Next i
Application.CutCopyMode = False
End Sub
Как видите, прежде всего я удалил объявление Dim переменной stock. Возникала ошибка при перезаписи значения.
Во-вторых, вместо поиска вверх от нижней части таблицы, я ищу от H1 до последней использованной строки для оптимизации.
Самое главное, я вложил еще один для вашего, проверяя все остальные номера акций в столбце.
Затем я проверил последнюю строку внутри блока If. Я не совсем уверен, что вы пытались сделать, так как я не до конца понимаю эту строку в вашем коде. Но я попробовал с моим методом, и это сработало.
В результате получилось: Каждый номер акции, который имел совпадение в предыдущей строке, будет иметь одинаковые значения в столбцах с I по M в этой строке
Перед выполнением макроса:
После выполнения:
Я не уверен, что это точно , к чему вы стремитесь, но это только начало.
Я уверен, что этот макрос должен быть реализован на слушателе или кнопке для более легкого использования.
Надеюсь, это поможет.