сопоставить с предыдущими записями в столбце, скопировать остальные данные в строке - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь создать код vba, который позволит быстрее вводить возможные повторяющиеся данные.В моем примере я пытаюсь получить записи в столбце H, чтобы проверить, был ли этот номер запаса уже введен.Если это так, скопируйте данные из столбца I - столбец M соответствующей строки в столбец I - столбец M пустой строки «новая запись».

Вот одна из моих попыток ввода кода

    Private Sub finddata()
    Dim stock As Integer
    Dim finalrow As Integer
    Dim i As Integer

    finalrow = Sheet1.Range("H50").End(xlUp).Row
    For i = 2 To finalrow
    stock = Sheet1.Cells(i, 8).Value
    If Cells(i, 8) = stock Then
    Range(Cells(i, 9), Cells(i, 13)).Copy
    Range("I50").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
    End If
    Next i

    End Sub

enter image description here

Любой совет был бы замечательным, я не могу использовать vlookup напрямую в Excel, ячейки должны оставаться пустыми, поэтому данные могут быть введены, если совпадение не найдено.

Спасибо !!

1 Ответ

0 голосов
/ 26 апреля 2019

Мт.

Я играл с вашим макросом и фиктивным набором данных, похожим на ваш.

Я сделал несколько изменений в вашем коде, которые позволили мне получить результат, который вы ищете:

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 в этой строке

Перед выполнением макроса: Before executing macro

После выполнения: After executing

Я не уверен, что это точно , к чему вы стремитесь, но это только начало.

Я уверен, что этот макрос должен быть реализован на слушателе или кнопке для более легкого использования.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...