скопировать полосу с другого листа, если одинаковое значение - PullRequest
0 голосов
/ 05 октября 2018

У меня есть 5 столбцов на листе 1, и то же самое на листе 2. Название продукта обозначено буквой A. Но иногда характеристики продукта (в B, C, D, E) могут измениться на листе 2. Iхочу, чтобы он актуализировал характеристики в Sheet1.

Я пробовал Vlookup, но он работает только с одной ячейкой

Sub test()
With Sheets("Feuil1")
    .Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, Sheets("Feuil2").Range("A1:B100"), 2, False)
End With
End Sub

Более того, я не могу скопировать всю строку, потому что колонка F не должнаизменить ... И продукты на листе 1 в столбце А не аккуратны и имеют некоторые дубликаты ...

1 Ответ

0 голосов
/ 05 октября 2018

Вам необходим цикл для этого, чтобы обновить каждую строку, а также необходимо обновить каждый столбец.

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

Option Explicit

Public Sub UpdateData()
    Dim WsDest As Worksheet 'destination workbook to write in
    Set WsDest = ThisWorkbook.Worksheets("Feuil1")

    Dim WsSrc As Worksheet 'source workbook to match with
    Set WsSrc = ThisWorkbook.Worksheets("Feuil2")

    Dim LastRow As Long 'last used row in workbook
    LastRow = WsDest.Cells(WsDest.Rows.Count, "A").End(xlUp).Row

    Dim iRow As Long, MatchedRow As Long
    For iRow = 1 To LastRow 'loop through all rows from row 1 to last used row and update each row
        MatchedRow = 0 'initialize
        On Error Resume Next 'if no match found then ignore error
        MatchedRow = WorksheetFunction.Match(WsDest.Cells(iRow, "A"), WsSrc.Columns("A"), 0) 'get the row number of the match
        On Error GoTo 0 'reactivate error reporting

        'if it didn't match then MatchedRow is still 0

        If MatchedRow > 0 Then 'if a match was found then copy values
            WsDest.Cells(iRow, "B").Value = WsSrc.Cells(MatchedRow, "B").Value
            WsDest.Cells(iRow, "C").Value = WsSrc.Cells(MatchedRow, "C").Value
            WsDest.Cells(iRow, "D").Value = WsSrc.Cells(MatchedRow, "D").Value
            WsDest.Cells(iRow, "E").Value = WsSrc.Cells(MatchedRow, "E").Value
        Else
            'didn't find a match
            'you can remove the Else part if you want to do nothing here
        End If
    Next iRow
End Sub

Если столбцы, которые вы хотите скопировать, являются непрерывными, как B, C, D, E, вы можете сделать это водно действие копирования, которое выполняется быстрее, чем 4 действия копирования (по 1 для каждого столбца):

WsDest.Range("B" & iRow & ":E" & iRow).Value = WsSrc.Range("B" & MatchedRow & ":E" & MatchedRow).Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...