Обновление таблицы сравнения столбцов
- Тщательно настройте const муравьев, включая Рабочие книги .
- Скопируйте код в стандартный модуль (например,
Module1
).
Код
Option Explicit
Sub updateWorksheet()
' Source
Const srcWb As String = "Source.xlsm"
Const srcWs As String = "Sheet1"
Const srcFirstRow As Long = 2
Const srcCriteria As Variant = "B"
Const srcValue As Variant = "C"
' Target
Const tgtWb As String = "Target.xlsm"
Const tgtWs As String = "Sheet2"
Const tgtFirstRow As Long = 2
Const tgtCriteria As Variant = "A"
Const tgtValue As Variant = "B"
' Workbooks
Dim wbSrc As Workbook: Set wbSrc = Workbooks(srcWb)
'Dim wbSrc As Workbook: Set wbSrc = ThisWorkbook
Dim wbTgt As Workbook: Set wbTgt = Workbooks(tgtWb)
'Dim wbTgt As Workbook: Set wbTgt = ThisWorkbook
' Write values from Source Range to Source Array.
Dim src As Worksheet: Set src = wbSrc.Worksheets(srcWs)
Dim rng As Range
Set rng = src.Columns(srcCriteria).Find("*", , xlValues, , , xlPrevious)
If rng Is Nothing Then Exit Sub
If rng.Row < srcFirstRow Then Exit Sub
Set rng = src.Range(src.Cells(srcFirstRow, srcCriteria), rng)
Dim Source(1) As Variant: Source(0) = rng.Value
Source(1) = rng.Offset(, src.Columns(srcValue).Column - rng.Column).Value
' Write values from Target Range to Target Array.
Dim tgt As Worksheet: Set tgt = wbTgt.Worksheets(tgtWs)
Set rng = tgt.Columns(tgtCriteria).Find("*", , xlValues, , , xlPrevious)
If rng Is Nothing Then Exit Sub
If rng.Row < tgtFirstRow Then Exit Sub
Set rng = tgt.Range(tgt.Cells(tgtFirstRow, tgtCriteria), rng)
Dim Target(1) As Variant: Target(0) = rng.Value
Set rng = rng.Offset(, tgt.Columns(tgtValue).Column - rng.Column)
Target(1) = rng.Value
Dim Curr As Variant
' Write from Source Array to Target Array.
Dim i As Long
For i = 1 To UBound(Target(0))
Curr = Application.Match(Target(0)(i, 1), Source(0), 0)
If Not IsError(Curr) Then
Target(1)(i, 1) = Source(1)(Curr, 1)
End If
Next i
' Write from Target Array to Target Range.
rng.Value = Target(1)
' Inform user.
MsgBox "Data transferred.", vbInformation, "Success"
End Sub