Я пытаюсь найти и сопоставить значение во втором листе, после его обнаружения я хотел бы заменить соседние значения, расположенные рядом с совпадающим значением.
Я хочу, чтобы это было сделано только с одним InputBox.Мне удалось собрать воедино следующий код, который работает для меня, но он требует, чтобы я нашел соответствующее значение самостоятельно на втором листе.Я попытался манипулировать им, чтобы автоматически найти второе значение, однако у меня возникли проблемы с этим.
Вот примеры значений для
ReplaceRng (sheet1) : https://imgur.com/d59NDg5
Name = RandomName
Value1 = 27
Value2 = 29
Value3 = 31
InputRng (sheet2) : https://imgur.com/iiSTtrw
ReplaceRng Name = RandomName
ReplaceRng Value1 = 25
ReplaceRng Value2 = 22
ReplaceRng Value3 = 25
Так что, если я использую этот код,Я могу найти и заменить значения, но для этого требуются два поля ввода:
Sub ReplaceRange
Dim rng As Range
Dim InputRng As Range, ReplaceRng As Range
xTitleId = "ReplaceRange"
'В этой части я вставляю данные
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Original Range ", xTitleId,
InputRng.Address, Type:=8)
Set ReplaceRng = Application.InputBox("Replace Range :", xTitleId, Type:=8)
Application.ScreenUpdating = False
' Это гдеInputRng назначается имя переменной для каждого значения в диапазоне
For Each rowInputRng In InputRng.Rows
Dim Name As String, Value1 As Integer, Value2 As Integer, Value3 As Integer
Name = InputRng.Cells(1).Value
Value1 = InputRng.Cells(2).Value
Value2 = InputRng.Cells(3).Value
Value3 = InputRng.Cells(4).Value
'Если первая ячейка в диапазоне Replace такая же, как во входном диапазоне, то соседние ячейки заменяются
For Each Row In ReplaceRngRng.Rows
If Row.Cells(1).Value = Name Then
Row.Cells(2).Value = Value1
Row.Cells(3).Value = Value2
Row.Cells(4).Value = Value3
End If
Next Row
Next rowInputRng
End Sub
Мой текущий код выглядит следующим образом, или, по крайней мере, то, что я изменил по сравнению с кодом, найденным выше, но, похоже, он не работает, и в настоящее время я не могу придумать, как это изменить.Я пробовал это несколькими способами, но я просто не могу автоматизировать поиск второго диапазона:
'Поиск значения
xTitleId = "RangeValueReplace"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Original Range ", xTitleId,
InputRng.Address, Type:=8)
Set ReplaceRng =
Application.WorksheetFunction.VLookup("InputRng.Cells(1).Value",
"Sheet1!A1:A1000", 1, 0))
' Замена соседних ячеек
For Each Row In ReplaceRng.Rows
If ReplaceRng.Cell(1).Value = Name Then
ReplaceRng.Cells(1).Offset(, 1).Value = Value1
ReplaceRng.Cells(1).Offset(, 2).Value = Value2
ReplaceRng.Cells(1).Offset(, 3).Value = Value3
End If
Next Row
Для большинства ошибок я получаю "синтаксическую ошибку" или ошибку времени выполнения "1004" Не удается получить свойство Vlookup класса WorksheetFunction