#excel #vba
#excel #vba
Вопрос:
У меня не так много знаний о VBA. А также слабый английский.
Приведенный ниже код предназначен для результата ВПР в одной ячейке, который работает хорошо, но теперь мне также нужны значения ВПР для диапазона («B1: B10») (соседний столбец).
Моя таблица VLOOKUP: — ThisWorkbook.Листы («имя_элемента»).Диапазон («D2: G10001»)
Номер индекса столбца: 3
Результат, который мне нужен: если я ввожу сумму в любую ячейку диапазона («A1: A10»), и если значение найдено в таблице VLOOKUP, то значение третьего столбца из таблицы VLOOKUP должно отображаться в соседней ячейке диапазона («B1: B10»)
Например: если я ввожу что-то в диапазоне A3, результат vlookup должен отображаться в диапазоне B3.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngCell As Range, m, v
Dim rngCell1 As Range, m1, v1
Check1:
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then GoTo Check2:
For Each rngCell In Range("A1:A10")
v = rngCell.Value
If Len(v) > 0 Then
'See if the value is in your lookup table
m = Application.VLookup(v, _
ThisWorkbook.Sheets("ItemName").Range("D2:G10001"), 2, False)
'If found a match then replace wiht the vlookup result
If Not IsError(m) Then rngCell.Value = m
End If
Next
Exit Sub
Check2:
End Sub
Комментарии:
1. С чем именно у вас возникли проблемы? Похоже, у вас есть знания кода?
2. Нет, сэр, я не разбираюсь в кодировании, приведенный выше код также можно получить с этого сайта. Пожалуйста, помогите мне.
Ответ №1:
Думаю, это делает то, что вы хотите. Я также реструктурировал код, чтобы избежать ошибок.
Я также отключил события, чтобы избежать бесконечного цикла (не уверен, как вы сами этого избежали).
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngCell As Range, m1 As Variant, m2 As Variant
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
For Each rngCell In Intersect(Target, Range("A1:A10"))
If Len(rngCell.Value) > 0 Then
m1 = Application.VLookup(rngCell.Value, Range("D2:G10001"), 2, False)
m2 = Application.VLookup(rngCell.Value, Range("D2:G10001"), 3, False)
If Not IsError(m1) Then
Application.EnableEvents = False
rngCell.Value = m1
rngCell.Offset(, 1).Value = m2
Application.EnableEvents = True
End If
End If
Next
End Sub
Комментарии:
1. Уважаемый SRJ, спасибо за ваш любезный ответ, я не могу понять, почему он дает мне значение # N / A в диапазоне B1: B10.
2. Но я получаю правильное значение в диапазоне A1: A10.
3. Есть ли у вас NAs в столбце F?
4. Нет, сэр, листы («ItemName») Столбец F заполняется значением цены, пустых ячеек нет. и столбец G заполняются типом единицы измерения, без пустой ячейки.
5. Невероятно, у тебя талант уровня Бога. Снимаю шляпу перед гуру.