Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вставка сложных формул в макрос - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставка сложных формул в макрос (Макросы/Sub)
Вставка сложных формул в макрос
alex808 Дата: Понедельник, 29.08.2016, 15:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день, подскажите пожалуйста. Встал вопрос о вставке макросом формул исходя из количества аргументов... Написал вот такой код..При этом первые три формулы встают, а четвертая по (Х), что длинная ругается. Может кто видит ошибку?
[vba]
Код
Sub Макрос11()

Sheets("пересчет").Range("U2:U" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=RC[-2]-RC[+11]-RC[+14]"

Sheets("пересчет").Range("V2:V" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=RC[-3]"

Sheets("пересчет").Range("W2:W" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=RC[-5]*RC[-1]/100"

Sheets("пересчет").Range("X2:X" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=IF(RC[+44]=""менеджерская "",IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:" & _
        "ATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),ма" & _
        "C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)-VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)),""нет данных для расчета""),IF(RC[+44]=""агентская "",IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C" & _
        "E)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R" & _
        "LSE),""нет нижней КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)-VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),ма" & _
        "3:R8C9,0),FALSE)),""нет данных для расчета""),0))"

End Sub
[/vba]
сама формула выглядет так:
Код
=ЕСЛИ(RC[44]="менеджерская ";ЕСЛИ(И(ЕЧИСЛО(ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"));ЕЧИСЛО((ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"))));ВПР(ОКРУГЛВНИЗ(RC[-3];0);матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)+(RC[-3]-(ОКРУГЛВНИЗ(RC[-3];0)))*(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)-ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));"нет данных для расчета");ЕСЛИ(RC[44]="агентская ";ЕСЛИ(И(ЕЧИСЛО(ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"));ЕЧИСЛО((ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"))));ВПР(ОКРУГЛВНИЗ(RC[-3];0);матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)+(RC[-3]-(ОКРУГЛВНИЗ(RC[-3];0)))*(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)-ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));"нет данных для расчета");0))


Сообщение отредактировал alex808 - Понедельник, 29.08.2016, 15:51
 
Ответить
СообщениеДобрый день, подскажите пожалуйста. Встал вопрос о вставке макросом формул исходя из количества аргументов... Написал вот такой код..При этом первые три формулы встают, а четвертая по (Х), что длинная ругается. Может кто видит ошибку?
[vba]
Код
Sub Макрос11()

Sheets("пересчет").Range("U2:U" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=RC[-2]-RC[+11]-RC[+14]"

Sheets("пересчет").Range("V2:V" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=RC[-3]"

Sheets("пересчет").Range("W2:W" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=RC[-5]*RC[-1]/100"

Sheets("пересчет").Range("X2:X" & Cells(Rows.Count, 6).End(xlUp).Row).FormulaR1C1 = "=IF(RC[+44]=""менеджерская "",IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:" & _
        "ATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),ма" & _
        "C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)-VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)),""нет данных для расчета""),IF(RC[+44]=""агентская "",IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C" & _
        "E)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R" & _
        "LSE),""нет нижней КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),матрица!R8C3:R8C9,0),FALSE)-VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[+44]),ма" & _
        "3:R8C9,0),FALSE)),""нет данных для расчета""),0))"

End Sub
[/vba]
сама формула выглядет так:
Код
=ЕСЛИ(RC[44]="менеджерская ";ЕСЛИ(И(ЕЧИСЛО(ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"));ЕЧИСЛО((ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"))));ВПР(ОКРУГЛВНИЗ(RC[-3];0);матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)+(RC[-3]-(ОКРУГЛВНИЗ(RC[-3];0)))*(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)-ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));"нет данных для расчета");ЕСЛИ(RC[44]="агентская ";ЕСЛИ(И(ЕЧИСЛО(ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"));ЕЧИСЛО((ЕСЛИ(ЕЧИСЛО(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ);"нет нижней КВ"))));ВПР(ОКРУГЛВНИЗ(RC[-3];0);матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)+(RC[-3]-(ОКРУГЛВНИЗ(RC[-3];0)))*(ВПР((ОКРУГЛВВЕРХ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ)-ВПР((ОКРУГЛВНИЗ(RC[-3];0));матрица!R10C3:R109C9;ПОИСКПОЗ(СЦЕПИТЬ(RC[-20];RC[44]);матрица!R8C3:R8C9;0);ЛОЖЬ));"нет данных для расчета");0))

Автор - alex808
Дата добавления - 29.08.2016 в 15:23
sboy Дата: Понедельник, 29.08.2016, 16:01 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 93 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Посмотрите в переносах строки
матрица!R10C3:" & _
        "ATCH

ма" & _
        "C3

матрица!R8C3:R8C" & _
        "E))

матрица!R8C3:R" & _
        "LSE)

ма" & _
        "3:R8C9,0)
 
Ответить
СообщениеДобрый день.
Посмотрите в переносах строки
матрица!R10C3:" & _
        "ATCH

ма" & _
        "C3

матрица!R8C3:R8C" & _
        "E))

матрица!R8C3:R" & _
        "LSE)

ма" & _
        "3:R8C9,0)

Автор - sboy
Дата добавления - 29.08.2016 в 16:01
sboy Дата: Понедельник, 29.08.2016, 16:03 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 93 ±
Замечаний: 0% ±

Excel 2010
Формула конечно зверь)
Если решили применять VBA, может имеет смысл расчеты перенести, чтоб не нагружать файл такими монстрами?
 
Ответить
СообщениеФормула конечно зверь)
Если решили применять VBA, может имеет смысл расчеты перенести, чтоб не нагружать файл такими монстрами?

Автор - sboy
Дата добавления - 29.08.2016 в 16:03
alex808 Дата: Понедельник, 29.08.2016, 16:20 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Посмотрите в переносах строки

Спасибо, я в экселе и тем более в VBA профан...Я сначала записал формулу в ячейку через рекодер, а потом просто скопировал получившийся вид... Вы хотите сказать, что при переносе в коду формула была деформирована и ее нужно восстановить? Я признаться, ничего про это не знаю. Что характерно, то что при записи макрос отрабатывает и подтягивает правильное значение, а при повторном нажатии уже ругается.

Формула конечно зверь)
Если решили применять VBA, может имеет смысл расчеты перенести, чтоб не нагружать файл такими монстрами?

Я понимаю, что такая тяжелая формула затормозит расчет, но моя цель вставить ее строк на 50-100, ибо расчеты нужны для формирования понимания работы расчетов по базе для формирования ТЗ. Я даже пытался дать задание специалисту, но практически сразу понял, что на его конкретные вопросы мне ответить будет нечего, вот и решил хотя бы усеченно "прожить" формирование базы хотя бы в усеченной форме
 
Ответить
Сообщение
Посмотрите в переносах строки

Спасибо, я в экселе и тем более в VBA профан...Я сначала записал формулу в ячейку через рекодер, а потом просто скопировал получившийся вид... Вы хотите сказать, что при переносе в коду формула была деформирована и ее нужно восстановить? Я признаться, ничего про это не знаю. Что характерно, то что при записи макрос отрабатывает и подтягивает правильное значение, а при повторном нажатии уже ругается.

Формула конечно зверь)
Если решили применять VBA, может имеет смысл расчеты перенести, чтоб не нагружать файл такими монстрами?

Я понимаю, что такая тяжелая формула затормозит расчет, но моя цель вставить ее строк на 50-100, ибо расчеты нужны для формирования понимания работы расчетов по базе для формирования ТЗ. Я даже пытался дать задание специалисту, но практически сразу понял, что на его конкретные вопросы мне ответить будет нечего, вот и решил хотя бы усеченно "прожить" формирование базы хотя бы в усеченной форме

Автор - alex808
Дата добавления - 29.08.2016 в 16:20
sboy Дата: Понедельник, 29.08.2016, 16:30 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 93 ±
Замечаний: 0% ±

Excel 2010
Вы хотите сказать, что при переносе в коду формула была деформирована и ее нужно восстановить

Или да, или деформировалась при копировании сюда на форум.
Можно попробовать заменить в макросе все FormulaR1C1 на FormulaLocal. И Формулы скопируйте как есть (по-русски) не через запись рекодером.
 
Ответить
Сообщение
Вы хотите сказать, что при переносе в коду формула была деформирована и ее нужно восстановить

Или да, или деформировалась при копировании сюда на форум.
Можно попробовать заменить в макросе все FormulaR1C1 на FormulaLocal. И Формулы скопируйте как есть (по-русски) не через запись рекодером.

Автор - sboy
Дата добавления - 29.08.2016 в 16:30
Udik Дата: Понедельник, 29.08.2016, 16:37 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1298
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Разбираться с этим монстром нет желания, но при любом разделении строки должно стоять & _ А у Вас, то просто обрыв
[vba]
Код

IF(RC[+44]=""агентская
""
[/vba]
то тире
[vba]
Код

,FALSE)-
VLOOKUP
[/vba]
Может это только на сайте так, тогда нужен файл


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеРазбираться с этим монстром нет желания, но при любом разделении строки должно стоять & _ А у Вас, то просто обрыв
[vba]
Код

IF(RC[+44]=""агентская
""
[/vba]
то тире
[vba]
Код

,FALSE)-
VLOOKUP
[/vba]
Может это только на сайте так, тогда нужен файл

Автор - Udik
Дата добавления - 29.08.2016 в 16:37
alex808 Дата: Понедельник, 29.08.2016, 16:40 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Разбираться с этим монстром нет желания, но при любом разделении строки должно стоять & _ А у Вас, то просто обрыв

Спасибо буду разбираться....не смогу урежу файл и выложу
 
Ответить
Сообщение
Разбираться с этим монстром нет желания, но при любом разделении строки должно стоять & _ А у Вас, то просто обрыв

Спасибо буду разбираться....не смогу урежу файл и выложу

Автор - alex808
Дата добавления - 29.08.2016 в 16:40
Gustav Дата: Понедельник, 29.08.2016, 16:47 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1253
Репутация: 490 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Есть мнение, что деформация произошла при записи макрорекордером. Как-то он подозрительно (примерно так же) порезал у меня на строчки со съеданием нескольких концевых символов - видимо, подошёл к собственному пределу, но как-то корявенько...

Я попробовал другой путь - скопировал текст формулы на английском языке в OneNote, там подвигал границы и подобрал приемлемый размер текстового фрейма. В местах визуальных концов строки принудительно нажал Enter. Далее взял полученный текст в Блокнот, удвоил внутри текста все двойные кавычки при помощи "Найти и заменить". Затем добавил по двойной кавычке в конец каждой строки и в начало каждой строки вставил фрагмент: vb = vb & ". Получился следующий код для создания формулы:

[vba]
Код
Sub insertBigFormula()
    Dim vb As String
        
    vb = vb & "=IF(RC[44]=""менеджерская "",IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-"
    vb = vb & "(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)-"
    vb = vb & "VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)),""нет данных для расчета""),IF(RC[44]=""агентская "
    vb = vb & """,IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-"
    vb = vb & "(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)-"
    vb = vb & "VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)),""нет данных для расчета""),0))"
        
    ActiveCell.FormulaR1C1 = vb
End Sub
[/vba]


Мой tip box - яд 41001663842605
 
Ответить
СообщениеЕсть мнение, что деформация произошла при записи макрорекордером. Как-то он подозрительно (примерно так же) порезал у меня на строчки со съеданием нескольких концевых символов - видимо, подошёл к собственному пределу, но как-то корявенько...

Я попробовал другой путь - скопировал текст формулы на английском языке в OneNote, там подвигал границы и подобрал приемлемый размер текстового фрейма. В местах визуальных концов строки принудительно нажал Enter. Далее взял полученный текст в Блокнот, удвоил внутри текста все двойные кавычки при помощи "Найти и заменить". Затем добавил по двойной кавычке в конец каждой строки и в начало каждой строки вставил фрагмент: vb = vb & ". Получился следующий код для создания формулы:

[vba]
Код
Sub insertBigFormula()
    Dim vb As String
        
    vb = vb & "=IF(RC[44]=""менеджерская "",IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-"
    vb = vb & "(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)-"
    vb = vb & "VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)),""нет данных для расчета""),IF(RC[44]=""агентская "
    vb = vb & """,IF(AND(ISNUMBER(IF(ISNUMBER(VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")),ISNUMBER((IF(ISNUMBER(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!"
    vb = vb & "R8C3:R8C9,0),FALSE)),VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE),""нет нижней "
    vb = vb & "КВ"")))),VLOOKUP(ROUNDDOWN(RC[-3],0),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)+(RC[-3]-"
    vb = vb & "(ROUNDDOWN(RC[-3],0)))*(VLOOKUP((ROUNDUP(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)-"
    vb = vb & "VLOOKUP((ROUNDDOWN(RC[-3],0)),матрица!R10C3:R109C9,MATCH(CONCATENATE(RC[-20],RC[44]),матрица!R8C3:R8C9,0),FALSE)),""нет данных для расчета""),0))"
        
    ActiveCell.FormulaR1C1 = vb
End Sub
[/vba]

Автор - Gustav
Дата добавления - 29.08.2016 в 16:47
alex808 Дата: Понедельник, 29.08.2016, 18:07 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Есть мнение, что деформация произошла при записи макрорекордером. Как-то он подозрительно (примерно так же) порезал у меня на строчки со съеданием нескольких концевых символов - видимо, подошёл к собственному пределу, но как-то корявенько...

Да именно так и произошло...Взял Ваш подход, чуток подправил для интервала, чтобы заполнил все ячейки в столбце и все заработало!!! Большое Вам и всем спасибо за подсказки и потраченное время!
 
Ответить
Сообщение
Есть мнение, что деформация произошла при записи макрорекордером. Как-то он подозрительно (примерно так же) порезал у меня на строчки со съеданием нескольких концевых символов - видимо, подошёл к собственному пределу, но как-то корявенько...

Да именно так и произошло...Взял Ваш подход, чуток подправил для интервала, чтобы заполнил все ячейки в столбце и все заработало!!! Большое Вам и всем спасибо за подсказки и потраченное время!

Автор - alex808
Дата добавления - 29.08.2016 в 18:07
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставка сложных формул в макрос (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!