Страницы: 1
RSS
Реализация формул ЕСЛИОШИБКА и ВПР в VBA
 
Добрый день!
Есть формула в ячейке
Код
=ЕСЛИОШИБКА(ВПР(F$2;'[Альметьевск, май 2014.xls]Расчетный лист'!$A:$M;5;0);0)
 
Мне ее нужно было записать в VBA, чтобы подставить вместо названия города, месяца и года - переменные и чтобы вместо формулы в ячейке после отработки маркоса было число а не формула.
Макрорекодером получилась следующая запись.
Код
ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(R2C,'[Альметьевск, май 2014.xls]Расчетный лист'!C1:C13,5,0),0)"
Необходимо было Альметьевск заменить на City
Май на Mon
Год на Yr
Моих знаний хватило на такую формулу
Код
 book.Cells(4 + i, 6) = Application.IfError(Application.VLookup(Range("F2"), "'[" & City & ", " & Mon & " " & Yr & ".xls]Расчетный лист'!" & Columns(1, 13), 5, 0), 0)
Где я написал лишнее или где я что-то не дописал?
 
функция ВПР (VLOOKUP) в качестве второго аргумента принимает диапазон или массив.
а Вы пытаетесь подсунуть ей строку с адресом диапазона.

можно попробовать так:
Код
book.Cells(4 + i, 6) = Application.IfError(Application.VLookup(Range("F2"), Workbooks(City & ", " & Mon & " " & Yr & ".xls").Sheets("Расчетный лист").[a:m], 5, 0), 0)
или, если не получится, убрать расширение из имени книги - от настроек зависит.
Изменено: ikki - 21.08.2014 13:23:45
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Может проще сделать FormulaLocal = " = а здесь прописать формулу прямо как в екселе пишите"
 
ikki, Работает. Спасибо!
 
Можно еще глупый вопрос. Знаю что одна тема один вопрос,но ради такого вопроса создавать тему стыдно. Как скопировать и вставить  значение ячейки без использования Select
 
Range().Copy Destination

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, ошибку выдает: Destination воспринимает как переменную и ругается что она не объявлена
 
Finswimmer, Вы меня дословно поняли. Взял из справки. Попробую так:
Адрес_копируемых_ячеек.Копируем Адрес_куда_копируем
Лучше так перефразирую:
Диапазон_копируемых_ячеек.Копируем Диапазон_куда_копируем
Изменено: JayBhagavan - 21.08.2014 14:30:39

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
но это будет не "скопировать и вставить значение"
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki,странная ситуевина получается. Когда прохожу формулу пошагово то работает. Когда запускаю чтоб отработал самостоятельно то нули показываются везде
 
не могу назначить лечение по такому диагнозу :(
пациент недоступен для наблюдений.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Finswimmer для решения большинства вопросов требуется файл.
 
Цитата
V пишет: для решения большинства вопросов требуется файл
Цитата
Сообщений: 146
не новичок вроде бы...
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Расчет идет в файле комиссии
 
я ученик в макросах но меня смущает: в коде .xls а приложенный файл .xlsx
уберите пропуск ошибок и посмотрите где останавливается макрос.
Изменено: V - 21.08.2014 15:21:53
 
V,пардон, не в том формате сохранил вся пачка фалов в формате xls
Изменено: Finswimmer - 21.08.2014 16:08:13
 
При сохранении в xls формате весит больше 100кб. Даже при обрезании лишнего(
 
Может поможет в решении проблемы: в файле комиссии макрос открывает файл, делает вычисления, закрывает. В такой последовательности выдает 0. Если открыть файлы вручную и миновать это действие макросом, то вычисляется все корректно. Почему так?
 
Можно было всю эту кучу xls запаковать в один rar - было бы и компактно, и удобно.
И кстати этот xlsm я например открыть не могу - конвертер его выплёвывает.
 
P.S. если это важно excel 2013. Раньше проблем не было с этими вычислениями. Макрос был открыть все файлы, далее в ячейках была формула смещ, потом закрыть все файлы. Когда поставили 2013 макрос долго работал, потом вырубался excel, поэтому решил переделать макрос
 
Цитата
Finswimmer пишет: ради такого вопроса создавать тему стыдно
А сообщение нет))
Код
cells(1,1).copy cells(2,2) 
 
Юрий М,стыдно, но узнать ведь как-то надо. Данный вариант вставляет формулу, а мне нужно чтобы вставлялось значение. Когда прописываю cells(2,1).Paste ругается на меня, не могу понять как тут обойтись без Select
 
Если значение, то так:
Код
cells(2,2).value=cells(1,1).value
 
 
Юрий М,все гениальное просто. Спасибо!!!
 
Помогите пожалуйста разобраться почему выдает ошибку при выполнении данного кода:
Код
ActiveCell.FormulaR1C1Local = _
        "=ЕСЛИОШИБКА(ВПР(RC[-1];Лист2!R2C2:R6C3;2;0);"")"

Если просто написать эту формулу в ячейке то все работает

 
Код
ActiveCell.FormulaR1C1Local = _
        "=ЕСЛИОШИБКА(ВПР(RC[-1];Лист2!R2C2:R6C3;2;0);"""")"

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, спасибо огромное! А в чем сакральный смысл двойного заковычивания пустоты? И ещё в продолжение темы: можно ли сделать так чтобы на лист вставлялась не формула, а результат её вычисления?  
 
В VBA формулы пишутся в кавычках. А если внутри кавычек нужно использовать ещё одни кавычки, то их нужно удваивать, т.е. из "", надо """", т.е. кавычки брать в кавычки, иначе VBA не поймет формулу
 
New, спасибо буду знать
Страницы: 1
Наверх