Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Как написать в VBA функцию аналог ВПР?  [new]
Слобожанин
Guest
Уважаемые собеседники,
У меня возникла такая проблема: надо прописать в VBA функцию ВПР (или ГПР), а как не представляю.
Кстати, может кто даст ссылочку, если таковая имеется, где можно посмотреть VBA-аналоги функций Excel?

Заранее очень благодарен.

С уважением,
Слобожанин.
6 июн 05, 16:51    [1600290]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Слобожанин
Guest
... кажется таки нашёл способ.
Надо перед наименованием функции в английском варианте, поставить "Application.". Например:

Function ВПРо(искомое_значение, таблица, номер_столбца, интервальный_просмотр) 'As Boolean


ВПРо = Application.VLookup(искомое_значение, таблица, номер_столбца, интервальный_просмотр)
End Function

И всё же, полагаю это наиболее затратный способ. Может кто подскажет другой способ, если есть?

С уважением,
Слобожанин.
6 июн 05, 18:00    [1600617]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
pashulka.
Guest
Вы не написали аналог стандартной функции рабочего листа =ВПР() а просто-напросто использовали её в своей пользовательской функции, так как Application.VLookup не что иное, как "сокращённый" вариант Application.WorksheetFunction.Vlookup
17 июн 05, 08:15    [1627300]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
batiq
Guest
Найди в папке с Офисом файл funcs.xls
22 июл 05, 17:30    [1729143]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
pashulka.
Guest
А вот и топик из которого был выдернут предыдущий совет : http://bbs.vbstreets.ru/viewtopic.php?t=17872

P.S. Для того, чтобы получить результат аналогичный тому, что возвратит стандартная функция рабочего листа =ВПР() если ввести её в ячейку, не обязательно использовать :
Application.Vlookup
WorksheetFunction.Vlookup
Application.WorksheetFunction.Vlookup
23 июл 05, 02:13    [1729996]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
talgat
Member

Откуда: Tallinn Estonia
Сообщений: 581
Достаточно использовать "поиск" хорошо описанный на данном форуме
и взяти е данных в соседнем столбце
23 июл 05, 17:27    [1730294]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
pashulka.
Guest
Можно конечно использовать и .Find, хотя я подразумевал совершенно другой вариант.
P.S. Ради интереса сравните количество строк в Вашем коде с использованием .Find и .WorksheetFunction
24 июл 05, 02:10    [1730591]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Granata005
Member

Откуда:
Сообщений: 401
А никто не пробовал делать собственный ВПР работающий с двумя параметрами... т.е. макросом.. чтоб без массива..?
15 май 07, 10:51    [4137614]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
klen_
Member

Откуда:
Сообщений: 2404
Я делаю так
первая часть кода запоминает значения в массив из Листа1, например, Ф.И.О
вторая часть кода читает второй лист и ищет соответствие в массиве
15 май 07, 11:06    [4137792]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Deggasad
Member

Откуда: Воронеж
Сообщений: 3490
Granata005
А никто не пробовал делать собственный ВПР работающий с двумя параметрами... т.е. макросом.. чтоб без массива..?


Что значит без массива?
Если без {...}, то =Суммпроизв((A1:A100=a)*(B1:B100=b)*C1:C100)

В макросе
Evaluate("SUMPRODUCT((A1:A100=a)*(B1:B100=b)*C1:C100)")
По моему так
15 май 07, 11:29    [4137986]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Granata005
Member

Откуда:
Сообщений: 401
Да, именно без {...}

Я туплю ужасно, но как ей пользоваться?

К примеру в таком случае:

устовие1 устовие2 сумма
а 1 210
б 2 796
с 3 637

найти сумму с двумя условиями
б 2 796

чтоб без добавления индексного столбца... :-(

К сообщению приложен файл (ВПР22.xls - 13Kb) cкачать
15 май 07, 12:02    [4138248]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Deggasad
Member

Откуда: Воронеж
Сообщений: 3490
Granata005
Да, именно без {...}

Я туплю ужасно, но как ей пользоваться?

К примеру в таком случае:

устовие1 устовие2 сумма
а 1 210
б 2 796
с 3 637

найти сумму с двумя условиями
б 2 796

чтоб без добавления индексного столбца... :-(


Если в третьем столбце суммы поставишь, то всё получится, а то в твоём файле текст в третьем столбце, а стекстом уже сложней
15 май 07, 13:13    [4138708]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Deggasad
Member

Откуда: Воронеж
Сообщений: 3490
=ЕСЛИ(СУММПРОИЗВ(($A$1:$A$99=D1)*($B$1:$B$99=E1));ИНДЕКС($C$1:$C$99;СУММПРОИЗВ(($A$1:$A$99=D1)*($B$1:$B$99=E1)*СТРОКА($C$1:$C$99)));0)

Формула для выбора текстового значения по двум условиям, только длинно получилось, но сейчас нет времени думать!
15 май 07, 13:29    [4138833]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Сергей06
Member

Откуда: Екатеринбург
Сообщений: 1534
https://www.sql.ru/forum/actualthread.aspx?tid=376243
17 май 07, 10:49    [4148371]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как написать в VBA функцию аналог ВПР?  [new]
avgust2047
Member

Откуда:
Сообщений: 1
Привет друзья.
Ищу помощи

впервые столкнулся с программированием. записал простой макрос с впр, но с ним много проблем.

во вложении исходная таблица Лист1 я её обрезал и Лист2 откуда вытягиваем искомое, её тоже обрезал.
помогите сделать красиво. Нужно проВПРить от ячейки I2 до конца ближайшего слева столбца [-1]., чтобы не уехало на дно. т.к. колво строк может быть от 2тыс до 140тыс.
искомое значение 4 столб D из Листа2 нужно вытянуть данные(меж) из 2го столбца

Нашел на форумах такую штуку, см.ниже, но не справился с ней.

' Макрос2 Макрос
'
 With ThisWorkbook.Worksheets("Лист1")
  .Range(.Cells(2, 1), .Cells(5000, 1)).FormulaR1C1 = "=VLOOKUP(RC[-5],Лист2!R1C1:R114C2,2,0)"
 End With
 
End Sub

Модератор: Учимся использовать тэги оформления кода - FAQ


СПАСИБО.

К сообщению приложен файл (пример.xlsx - 13Kb) cкачать
23 апр 19, 15:05    [21869861]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Казанский
Member

Откуда:
Сообщений: 1307
avgust2047,
из правил форума, где Вы разместили тот же вопрос: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=116530&TITLE_SEO=116530-prostoy-vpr
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=rules
4. Не рекомендуется

4.1. Создавать одинаковые темы или сообщения в разных форумах (cross-posting). Публикуя один и тот же вопрос в разных форумах и на дружественных сайтах вы заставляете сразу нескольких людей параллельно думать над вашей задачей и обесцениваете усилия тех, кто даст ответ вторым-третьим и т.д.
23 апр 19, 18:55    [21870065]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
Кстати, мне всегда было интересно, что такого ужасного в cross-posting? Допустим кто-то опубликовал вопрос на одном форуме, и вероятно, несколько человек параллельно будут думать над задачей? А если аудитория думающих будет больше, то решение может найтись быстрее и решений может оказаться несколько? Если помощь бесплатная, то усилия в любом случае не имеют цены для помогающего? Здоровая конкуренция между сайтами (даже дружественными) лишь улучшит их качество?
23 апр 19, 20:03    [21870099]     Ответить | Цитировать Сообщить модератору
 Re: Как написать в VBA функцию аналог ВПР?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19153
iMrTidy
что такого ужасного в cross-posting?
В самом кроссе - ничего. Отторжение возникает потому, что 99% кросс-постеров не обслуживают созданный пакет вопросов. Т.е. не дублируют высказанные в одном треде светлые мысли и идеи в другой, не публикуют финальные решения (об объяснениях даже речи не идёт!), даже не публикуют в тредах ссылки на кросс-темы. Т.е. вина за отторжение - практически целиком и полностью на авторе.
24 апр 19, 08:21    [21870275]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить