Используйте обработчик событий Worksheet_Change(ByVal Target As Range)
(определенный для рабочего листа) для вашей задачи. Эта функция будет вызываться каждый раз, когда изменяется значение ячейки этого листа (пользователем или другим кодом vba ).
Параметр Target
содержит диапазон ячеек, которые были изменены. Теперь переберите столбцы и строки в этом диапазоне и выполните операцию поиска / замены, которую вы хотите выполнить. С помощью дополнительной логической переменной убедитесь, что обработчик событий не вызывает сам себя.
Public NoCellUpdateHandle As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If NoCellUpdateHandle Then Exit Sub
Dim row As Integer, col as Integer, idValue as String, replaceValue as String
For Each columnObj In Target.Columns
For Each rowObj In columnObj.Rows
row = rowObj.Row
col = columnObj.Column
' You can filter for certain rows/columns
If row > 5 And row < 10 And col = 7 Then
idValue = ActiveSheet.Cells(row, col).Value
' do the lookup for the id value in the other worksheet here
' replaceValue = lookup(idValue)
' Disable the event handler and perform the replacement
NoCellUpdateHandle = True
ActiveSheet.Cells(row, col).Value = replaceValue
NoCellUpdateHandle = False
End If
Next rowObj
Next columnObj
End Sub
Это должно быть все, что тебе нужно.