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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставка сложных формул в макрос (Макросы/Sub)
Вставка сложных формул в макрос
alex808 Дата: Понедельник, 29.08.2016, 15:23 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

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

ма" & _
        "C3

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

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

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


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Посмотрите в переносах строки
матрица!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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

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


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

Автор - sboy
Дата добавления - 29.08.2016 в 16:03
alex808 Дата: Понедельник, 29.08.2016, 16:20 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

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

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


Яндекс: 410016850021169
 
Ответить
Сообщение
Вы хотите сказать, что при переносе в коду формула была деформирована и ее нужно восстановить

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

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

Excel 2016 х 64
Разбираться с этим монстром нет желания, но при любом разделении строки должно стоять & _ А у Вас, то просто обрыв
[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
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 0% ±

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

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

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

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

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

Я попробовал другой путь - скопировал текст формулы на английском языке в 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
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 0% ±

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

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

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

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

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