У меня есть две книги Excel, скажем, wb01 и wb02. Предположим, у них есть только один лист, sh01 и sh02 соответственно.
Мне нужно синхронизировать листы (sh01 и sh02), скопировав значения ячеек (столбцы имени и фамилии) из sh01 в sh02, когда столбец «Id» совпадает.
Пример
sh01 в wb01
Id | name | surname | Dept
10 | John | McCoy | Logistics
21 | Liam | Alloy | Administration
40 | Peter | Gregor | Finance
42 | Albert | Kein | Business
50 | Kelly | Braxton | Logistics
60 | Isabella | O'Neill | Finance
sh02 в wb02
Id | name | surname | ext.
10 | David | McCoy | 1004
23 | Bren | Summer | 1230
40 | George | Brown | 2400
42 | Astrid | Anderson | 3312
50 | Kelly | Braxton | 1139
51 | Evelyn | Connor | 4532
Мне не нужно копировать эти значения ячеек из sh02 в sh01, только из sh01 в sh02. Кроме того, если значение ячейки «Id» существует в wb01, но отсутствует в sh2, значения имени и фамилии ячеек должны быть скопированы в sh02 как новая строка, а остальные поля должны оставаться пустыми/пустыми в sh02.
Принимая во внимание два приведенных выше листа, после процесса копирования sh02 должен быть следующим:
Id | name | surname | ext.
10 | John | McCoy | 1004
21 | Liam | Alloy |
23 | Bren | Summer | 1230
40 | Peter | Gregor | 2400
42 | Albert | Kein | 3312
50 | Kelly | Braxton | 1139
51 | Evelyn | Connor | 4532
60 | Isabella | O'Neill |
Этот процесс копирования должен выполняться по запросу, я имею в виду, когда пользователь нажимает кнопку из sh02 в wb02. При нажатии кнопки будет выполнен макрос в sh02, чтобы начать процесс копирования с sh01 на sh02.
Вы буквально не предоставили никакого кода, который пытались использовать для этого, больше людей с радостью помогли бы, если бы вы хотя бы попытались его закодировать... Тем не менее, вы не указали имена своих листов, вот некоторый код, который вы можете протестировать.
Sub CopyValue
Dim Wb1 As Workbook, wb2 As Workbook, lastrow As Long, lastrow2 As Long, counter As Integer
counter = 0
Set wb1 = Workbooks("wb01")
Set wb2 = Workbooks("wb02")
lastrow = wb1.Range("A" & .Rows.Count).End(xlUp).Row
lastrow2 = wb2.Range("A" & .Rows.Count).End(xlUp).Row
For x = 2 To lastrow
For y = 2 To lastrow2
If wb1.Sheets("abc").Cells(x,1).Value = wb2.Sheets("def").Cells(y,1).Value Then
wb2.Sheets("def").Cells(y,2).Value = wb1.Sheets("abc").Cells(x,2).Value
wb2.Sheets("def").Cells(y,3).Value = wb1.Sheets("abc").Cells(x,3).Value
Else
counter= counter +1
wb2.Sheets("def").Cells(lastrow+counter,1).Value = wb1.sheets("abc").Cells(x,1).Value
wb2.Sheets("def").Cells(lastrow+counter,2).Value = wb1.sheets("abc").Cells(x,2).Value
wb2.Sheets("def").Cells(lastrow+counter,3).Value = wb1.sheets("abc").Cells(x,3).Value
End If
Next y
Next x
End Sub