Использование VLOOKUP в функции Excel 2007 VBA - PullRequest
1 голос
/ 14 декабря 2011

Я пробовал часы и часы примеров, но я постоянно получаю одну и ту же ошибку #NAME?

Мне нужно использовать VLOOKUP в функции VBA, а затем работать с результатом, прежде чем поместить результат в ячейку. Во-первых, у меня проблема просто заставить работать часть VBA VLOOKUP.

Для тестирования вот подробности Электронная таблица ... ... 1005 *

Рабочий лист = Лист1

4 строки х 2 столбца данных. Клетки D1: E4 Танец: 23 Французский: 42 Английский: 2 Музыка: 33

В ячейке A1 у меня будет вмененный пользователем контент, который будет иметь значение из столбца D, например, французский

В ячейке B1 я буду вызывать функцию = GetQty (А1, D1: E4,2) но я всегда получаю #NAME?

1) Как правильно вызвать функцию. Я делаю это правильно?

В моей функции VBA "GetQty" я просто хочу выполнить VLOOKUP для значения ячейки A1 и вернуть значение из соответствующей записи таблицы (ячейка D1: E4), например, вернуть 42, а затем поместить это значение в столбец B1 и (также столбец C1 через VBA, а не просто используя формулу в ячейке таблицы = B1)

Вот один из многих примеров, которые я пробовал в своей функции просто для того, чтобы заставить VLOOKUP работать.

Function GetQty(Celly As Range, CellyRange As Range, Colretval As Integer) As Integer
Dim result As String
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets("Sheet1")
GetQty = Application.WorksheetFunction.VLookup(sheet.Range(CellyRange), sheet.Range(CellyTable), Colretval, False)
End Function

Я пробовал много примеров, но всегда получаю #NAME? Ошибка

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Есть несколько проблем, в основном:

  • Первый аргумент для Vlookup не может быть диапазоном, должен быть значением
  • Безопаснее не объявлять тип возвращаемого значения как Integer

Вот рабочий пример того, как использовать Vlookup из VBA, может быть, это поможет (вы называете это просто VLookup):

Function VBAVlookup(ByVal search As Variant, _
                    cell_range As Range, _
                    offset As Long, _
                    Optional opt As Boolean = False)

Dim result As Variant
result = WorksheetFunction.VLookup(search, cell_range, offset, opt)
'do some cool things to result

VBAVlookup = result

End Function

Если то, что вы делаете, скорееизощренно, вы всегда можете использовать =Vlookup(...) * 55 +2 и тому подобное, чтобы вернуть управляемый результат из vlookup, используя только одну формулу.

0 голосов
/ 16 декабря 2014

Ниже приведен пример для получения диапазона столбца:

Range("A2", Range("A2").End(xlDown)).Rows.Count

Настройте ваш путь, так что это может помочь вам пройти диапазон.

...