|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.04.2009, 22:44 | #1 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Написать в VBA аналог формулы екселя.
Задача: есть таблица значений "Смежники.таблица", в которой 5 столбцов. Есть переменная в которой есть значение из первого столбца. Нужно получить значение любого столбца из строки в которой находиться значение.
В экселе решаю задачу так: "=IF(ISNA(VLOOKUP(I9,Смежники.табли ца,2,FALSE)),"111",VLOOKUP(I9,Смежн ики.таблица,5,FALSE))" В VBA написал так: WorksheetFunction.IF(WorksheetFunct ion.IsNA(WorksheetFunction.VLookup( смежники(n, i), "смежники.таблица", 2, False)), "111", WorksheetFunction.VLookup(смежники( n, i), "смежники.таблица", 5, False)) Вместо ячейки "I9" значения нужно брать из массива "смежники". При попытке выполнить вылетает матерная фраза "Невозможно получить свойство VLookup класса WorksheetFunction". Хотя основную часть я "подсмотрел" у самого экселя. Как быть? Куда рыть?
С уважением, Алексей.
|
12.04.2009, 22:54 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
А что это такое - смежники(n, i)?
Скорее всего эта функция возвращает значение не того типа, которое требуется функции VLookup в качестве параметра. Или попробуйте заменить "смежники.таблица" на [смежники.таблица]
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 12.04.2009 в 22:59. |
12.04.2009, 23:06 | #3 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Сейчас попробую....
С уважением, Алексей.
|
|
12.04.2009, 23:10 | #4 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Не помогло... Попробовал перенести значение из массива в переменную и подставить ее. То же мимо... (
С уважением, Алексей.
|
12.04.2009, 23:20 | #5 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Вот в таком виде функция VLookup работает правильно: (проверял)
Код:
Цитата:
(поскольку Вы передаёте функции не имя диапазона, а сам диапазон) И попробуйте вычислить формулу по частям - в VBA совсем не обязательно писать всё в одну строчку... Сразу увидите, в чём ошибка. Попробуйте так: Код:
Цитата:
Поставьте в строку res = WorksheetFunction.VLookup(5, [смежники.таблица], 2, False) вместо пятёрки какое-нибудь значение, которое точно присутствует в таблице, и проверьте макрос. А вообще, зачем проверять на ошибку результат функции WorksheetFunction.VLookup(смежники( n, i), [смежники.таблица], 2, False), если точно такой же результат выдаст WorksheetFunction.VLookup(смежники( n, i), [смежники.таблица], 5, False)? Код в этом случае упрощается: Код:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 12.04.2009 в 23:41. |
||
12.04.2009, 23:28 | #6 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Попробую перегрузиться....
С уважением, Алексей.
|
|
12.04.2009, 23:47 | #7 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Теперь поколдуем.... Можно немного подробнее что делает эта строчка? Код:
С уважением, Алексей.
|
|
13.04.2009, 00:00 | #8 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
On Error Resume Next - говорит Excel-ю, что в случае ошибки идём дальше
(короче, сообщения об ошибках выводиться не будут) Объект Err хранит все параметры произошедшей ошибки (номер, описание, и т.п.) Err.Clear - мы очищаем этот объект (сбрасываем параметры последней ошибки) Потом мы вычисляем функцию WorksheetFunction.VLookup, которая может сгенерировать ошибку Чтобы узнать, произошла ли ошибка, мы проверяем номер ошибки у объекта Err Если ошибка имела место, то номер ошибки будет ненулевой. PS: Всё это можно было прочитать в справке (или же спросить у Гугла) |
13.04.2009, 00:08 | #9 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
С уважением, Алексей.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Глюк Excel-2007??? Формулы в ячейку из VBA | Rafik | Microsoft Office Excel | 7 | 24.03.2009 13:59 |
Возможно ли написать в VB/VBA(Ex) софтину, которая бы управляла программой (или usb устройством) | RussellMur | Microsoft Office Excel | 14 | 09.03.2009 03:25 |
как написать на vba стандарные функции excel | ibrahimov | Microsoft Office Excel | 4 | 28.11.2008 04:42 |
Аналог with на С++. | Иллидан | Общие вопросы C/C++ | 1 | 16.05.2008 21:41 |
Как конвертировать из екселя записи в текстовый файл? | Askat | Общие вопросы Delphi | 6 | 02.07.2007 08:15 |