Если столбец B в Sheet2
находится в порядке возрастания…
![enter image description here](https://i.stack.imgur.com/u9K18.png)
… это можно легко сделать с помощью формулы.В B2 добавьте следующую формулу и потяните ее вниз и вправо.
=INDEX(Sheet2!D:D,MATCH($A:$A,Sheet2!$B:$B,1))
И вы получите этот вывод в Sheet1
:
![enter image description here](https://i.stack.imgur.com/zQLK6.png)
Такой же подход возможен для VBA с использованием Application.WorksheetFunction
, но я рекомендую использовать формулу.
VBA Solution
Option Explicit
Public Sub FindAndFillData()
Dim wsDest As Worksheet
Set wsDest = ThisWorkbook.Worksheets("Sheet1")
Dim wsLookup As Worksheet
Set wsLookup = ThisWorkbook.Worksheets("Sheet2")
Dim LastRow As Long
LastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row
Dim MatchedRow As Double
Dim iRow As Long
For iRow = 2 To LastRow
MatchedRow = 0 'initialize!
On Error Resume Next
MatchedRow = Application.WorksheetFunction.Match(wsDest.Cells(iRow, "A").Value, wsLookup.Columns("B"), 1)
On Error GoTo 0
If MatchedRow <> 0 Then
If wsDest.Cells(iRow, "A").Value <= wsLookup.Cells(MatchedRow, "C").Value Then
wsDest.Cells(iRow, "B").Value = wsLookup.Cells(MatchedRow, "D").Value
wsDest.Cells(iRow, "C").Value = wsLookup.Cells(MatchedRow, "E").Value
End If
End If
Next iRow
End Sub