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

Вход

Регистрация

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

 

= Мир MS Excel/Перенос формул в макрос - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Перенос формул в макрос (Excel)
Перенос формул в макрос
anisimovaleksandr32 Дата: Понедельник, 25.01.2021, 12:44 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 78
Репутация: 4 ±
Замечаний: 20% ±

Добрый день многоуважаемые форумчане!
Помогите с решением
В таблице в столбце 13 таблицы есть формула:

Которую хотел бы спрятать в макросы. Произвел запись макродекодером но терплю не удачу (((( почему то начинает ругаться

Аналогичная ситуация происходит и в двух других моих решениях
В столбце 14 данной таблице
И в ЗАКЛЮЧЕНИИ под таблицей...

Помогите пжл решить данные проблемы

[admin]Эта тема изначально не являлась готовым решением, но стала таковой в процессе решения задачи ТС
Универсальный макрос по переносу формул из ячеек листа в код VBA в сообщении № 17
К сообщению приложен файл: 7090601.xlsm (81.0 Kb)
 
Ответить
СообщениеДобрый день многоуважаемые форумчане!
Помогите с решением
В таблице в столбце 13 таблицы есть формула:

Которую хотел бы спрятать в макросы. Произвел запись макродекодером но терплю не удачу (((( почему то начинает ругаться

Аналогичная ситуация происходит и в двух других моих решениях
В столбце 14 данной таблице
И в ЗАКЛЮЧЕНИИ под таблицей...

Помогите пжл решить данные проблемы

[admin]Эта тема изначально не являлась готовым решением, но стала таковой в процессе решения задачи ТС
Универсальный макрос по переносу формул из ячеек листа в код VBA в сообщении № 17

Автор - anisimovaleksandr32
Дата добавления - 25.01.2021 в 12:44
Gustav Дата: Понедельник, 25.01.2021, 15:35 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
У Вас в коде пропал фрагмент формулы! Как корова языком слизала, а точнее - похоже, макрорекордер шалит не по-детски :(
Переводя на человеческий формат формулы (не R1C1), это средний коротенький фрагмент:
[vba]
Код
=ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)>3);"Только 3-и образца";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/
4);2);ЕСЛИ
(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))
[/vba]
Вот этого фрагмента (в формате R1C1) и нет в Вашем макросе:
[vba]
Код
4);2);ЕСЛИ
[/vba]
И теперь если этот фрагмент (уже в формате R1C1)
[vba]
Код
4),2),IF
[/vba]
аккуратненько вставить в макрос в начало второй строки после переноса формулы на новую строчку:
[vba]
Код
Sub Макрос1()
    Range("O31:O36").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(AND(R[-13]C[4]=""Раствор"",COUNT(RC[-1]:R[5]C[-1])=3),AVERAGE(RC[-1]:R[5]C[-1]),IF(AND(R[-13]C[4]=""Раствор"",COUNT(RC[-1]:R[5]C[-1])>3),""Только 3-и образца"",IF(COUNT(RC[-1]:R[5]C[-1])>5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1)-SMALL(RC[-1]:R[5]C[-1],2))/4),2),IF(COUNT(RC[-1]:R[5]C[-1])=5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/" & _
        "4),2),IF(COUNT(RC[-1]:R[5]C[-1])=4,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/3),2),IF(COUNT(RC[-1]:R[5]C[-1])=3,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/2),2),IF(COUNT(RC[-1]:R[5]C[-1])<=2,ROUND(AVERAGE(RC[-1]:R[5]C[-1]),2),)))))))"
End Sub
[/vba]
то всё волшебным образом заработает!


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Понедельник, 25.01.2021, 15:48
 
Ответить
СообщениеУ Вас в коде пропал фрагмент формулы! Как корова языком слизала, а точнее - похоже, макрорекордер шалит не по-детски :(
Переводя на человеческий формат формулы (не R1C1), это средний коротенький фрагмент:
[vba]
Код
=ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)>3);"Только 3-и образца";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/
4);2);ЕСЛИ
(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))
[/vba]
Вот этого фрагмента (в формате R1C1) и нет в Вашем макросе:
[vba]
Код
4);2);ЕСЛИ
[/vba]
И теперь если этот фрагмент (уже в формате R1C1)
[vba]
Код
4),2),IF
[/vba]
аккуратненько вставить в макрос в начало второй строки после переноса формулы на новую строчку:
[vba]
Код
Sub Макрос1()
    Range("O31:O36").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(AND(R[-13]C[4]=""Раствор"",COUNT(RC[-1]:R[5]C[-1])=3),AVERAGE(RC[-1]:R[5]C[-1]),IF(AND(R[-13]C[4]=""Раствор"",COUNT(RC[-1]:R[5]C[-1])>3),""Только 3-и образца"",IF(COUNT(RC[-1]:R[5]C[-1])>5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1)-SMALL(RC[-1]:R[5]C[-1],2))/4),2),IF(COUNT(RC[-1]:R[5]C[-1])=5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/" & _
        "4),2),IF(COUNT(RC[-1]:R[5]C[-1])=4,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/3),2),IF(COUNT(RC[-1]:R[5]C[-1])=3,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/2),2),IF(COUNT(RC[-1]:R[5]C[-1])<=2,ROUND(AVERAGE(RC[-1]:R[5]C[-1]),2),)))))))"
End Sub
[/vba]
то всё волшебным образом заработает!

Автор - Gustav
Дата добавления - 25.01.2021 в 15:35
lebensvoll Дата: Понедельник, 25.01.2021, 17:20 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Gustav, спасибо огромное за ответ!!!

Прошу меня простить за то что создал тему не со своего профиля (не смог вспомнить свой старый). А когда вспомнил и во становил, то тему решил не удалять (((((

Цитата
похоже, макрорекордер шалит не по-детски
а счем это может быть связано (((( и можно ли это устранить (((( ведь у меня еще два кода есть которые получаются тоже записываются (((( не правильно (((((


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеGustav, спасибо огромное за ответ!!!

Прошу меня простить за то что создал тему не со своего профиля (не смог вспомнить свой старый). А когда вспомнил и во становил, то тему решил не удалять (((((

Цитата
похоже, макрорекордер шалит не по-детски
а счем это может быть связано (((( и можно ли это устранить (((( ведь у меня еще два кода есть которые получаются тоже записываются (((( не правильно (((((

Автор - lebensvoll
Дата добавления - 25.01.2021 в 17:20
Gustav Дата: Понедельник, 25.01.2021, 18:24 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
а счем это может быть связано (((( и можно ли это устранить

А фиг знает... честно говоря, сам первый раз с таким сталкиваюсь... И поэтому я бы советовал в данном случае не пользоваться макрорекордером, а создавать формулы с помошью свойства FormulaLocal объекта Range. Преимущество, в первую очередь, состоит в том, что Вы берете за основу формулу в ее, так сказать, естественном виде, в котором она отображается в окне формул (ну, если только, конечно, Вы не ярый фанат адресации R1C1). Сопровождать формулу в таком естественном виде значительно проще, чем в формате R1C1. Пожалуй, при этом единственное, но вполне преодолимое, неудобство заключается в необходимости удвоения в коде VBA двойных кавычек, если таковые имеются в формуле.

В качестве узелка на память предложу примерную схему преобразования текста формулы из ячейки - в макрос VBA, воссоздающий эту формулу в той же ячейке.

1. Копируем текст формулы в Блокнот (Notepad) и разбиваем на несколько строк примерно равной длины. Разбивать можно в любом месте, хоть посредине функции - это нестрашно:
[vba]
Код
=ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)>3);
"Только 3-и образца";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))
[/vba]
2. Далее в Блокноте же в получившемся текстовом фрагменте удваиваем все двойные кавычки. Т.е. вызываем окно замены по Ctrl+H и указываем Что: " и Чем: "" :
[vba]
Код
=ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)>3);
""Только 3-и образца"";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))
[/vba]
3. Далее в Блокноте же в начало каждой строки вставляем фрагмент: strFormula = strFormula & " (включая двойную кавычку), а в конец каждой строки - одну двойную кавычку " (чтобы закрыть строку):
[vba]
Код
strFormula = strFormula & "=ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)>3);"
strFormula = strFormula & """Только 3-и образца"";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-"
strFormula = strFormula & "НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))"
strFormula = strFormula & "/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;"
strFormula = strFormula & "ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))"
[/vba]
4. Далее дописываем несколько операторов VBA - ДО и ПОСЛЕ фрагмента - и получаем законченную работоспособную процедуру:
[vba]
Код
Sub Macro1
    Dim strFormula As String

    strFormula = strFormula & "=ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)>3);"
    strFormula = strFormula & """Только 3-и образца"";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-"
    strFormula = strFormula & "НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))"
    strFormula = strFormula & "/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;"
    strFormula = strFormula & "ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))"

    Range("O31").FormulaLocal = strFormula
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
а счем это может быть связано (((( и можно ли это устранить

А фиг знает... честно говоря, сам первый раз с таким сталкиваюсь... И поэтому я бы советовал в данном случае не пользоваться макрорекордером, а создавать формулы с помошью свойства FormulaLocal объекта Range. Преимущество, в первую очередь, состоит в том, что Вы берете за основу формулу в ее, так сказать, естественном виде, в котором она отображается в окне формул (ну, если только, конечно, Вы не ярый фанат адресации R1C1). Сопровождать формулу в таком естественном виде значительно проще, чем в формате R1C1. Пожалуй, при этом единственное, но вполне преодолимое, неудобство заключается в необходимости удвоения в коде VBA двойных кавычек, если таковые имеются в формуле.

В качестве узелка на память предложу примерную схему преобразования текста формулы из ячейки - в макрос VBA, воссоздающий эту формулу в той же ячейке.

1. Копируем текст формулы в Блокнот (Notepad) и разбиваем на несколько строк примерно равной длины. Разбивать можно в любом месте, хоть посредине функции - это нестрашно:
[vba]
Код
=ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18="Раствор";СЧЁТ(N31:N36)>3);
"Только 3-и образца";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))
[/vba]
2. Далее в Блокноте же в получившемся текстовом фрагменте удваиваем все двойные кавычки. Т.е. вызываем окно замены по Ctrl+H и указываем Что: " и Чем: "" :
[vba]
Код
=ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)>3);
""Только 3-и образца"";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))
[/vba]
3. Далее в Блокноте же в начало каждой строки вставляем фрагмент: strFormula = strFormula & " (включая двойную кавычку), а в конец каждой строки - одну двойную кавычку " (чтобы закрыть строку):
[vba]
Код
strFormula = strFormula & "=ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)>3);"
strFormula = strFormula & """Только 3-и образца"";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-"
strFormula = strFormula & "НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))"
strFormula = strFormula & "/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;"
strFormula = strFormula & "ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))"
[/vba]
4. Далее дописываем несколько операторов VBA - ДО и ПОСЛЕ фрагмента - и получаем законченную работоспособную процедуру:
[vba]
Код
Sub Macro1
    Dim strFormula As String

    strFormula = strFormula & "=ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=""Раствор"";СЧЁТ(N31:N36)>3);"
    strFormula = strFormula & """Только 3-и образца"";ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-"
    strFormula = strFormula & "НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))"
    strFormula = strFormula & "/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;"
    strFormula = strFormula & "ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))"

    Range("O31").FormulaLocal = strFormula
End Sub
[/vba]

Автор - Gustav
Дата добавления - 25.01.2021 в 18:24
lebensvoll Дата: Понедельник, 25.01.2021, 18:51 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Gustav, СПАСИБО за такой подробнейший подход к записи
Я делал грубо.
1. Формулы и так создавались с трудом и долго правились и поправлялись
2. В VBA я не силен (((( форум во многом помогал. Но я эту процедуру делал так:
копировал формулу
вставал на нужную ячейку, включал "запись" и вставлял скопированную формулу, останавливал запись и потом уже получишвийся код-формулу подставлял куда нужно.
Если во многом формулы так получались на ура. То именно с этими тремя формулами возникали проблемы ((((
Буду пробовать Ваше предложенное

Но у меня же будет не одна формула а много их ((((

СПАСИБО ВАМ ОГРОМНЕЙШЕЕ


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Понедельник, 25.01.2021, 18:53
 
Ответить
СообщениеGustav, СПАСИБО за такой подробнейший подход к записи
Я делал грубо.
1. Формулы и так создавались с трудом и долго правились и поправлялись
2. В VBA я не силен (((( форум во многом помогал. Но я эту процедуру делал так:
копировал формулу
вставал на нужную ячейку, включал "запись" и вставлял скопированную формулу, останавливал запись и потом уже получишвийся код-формулу подставлял куда нужно.
Если во многом формулы так получались на ура. То именно с этими тремя формулами возникали проблемы ((((
Буду пробовать Ваше предложенное

Но у меня же будет не одна формула а много их ((((

СПАСИБО ВАМ ОГРОМНЕЙШЕЕ

Автор - lebensvoll
Дата добавления - 25.01.2021 в 18:51
RAN Дата: Понедельник, 25.01.2021, 18:55 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Но все преимущество FormulaLocal сводится на нет одной строчкой
[vba]
Код
With Range("O31:O36")
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНо все преимущество FormulaLocal сводится на нет одной строчкой
[vba]
Код
With Range("O31:O36")
[/vba]

Автор - RAN
Дата добавления - 25.01.2021 в 18:55
Gustav Дата: Понедельник, 25.01.2021, 19:18 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
With Range("O31:O36")

В чём подвох? Вроде, формула автоматически нормально протягивается в этом диапазоне (если об этом)...


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
With Range("O31:O36")

В чём подвох? Вроде, формула автоматически нормально протягивается в этом диапазоне (если об этом)...

Автор - Gustav
Дата добавления - 25.01.2021 в 19:18
RAN Дата: Понедельник, 25.01.2021, 20:33 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Протягивается, а не вставляется.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПротягивается, а не вставляется.

Автор - RAN
Дата добавления - 25.01.2021 в 20:33
lebensvoll Дата: Среда, 27.01.2021, 21:31 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
:'( :'( :'(
ААААААААААААААААА блин ну почемууууу ну что не так то :'( :'( :'(
ПОМОГИТЕ ПЖЛ с решением!!!
Сев за другой комп у меня получилось произвести запись через Macro Recorder

НО стал записывать следующую формулу ((((( терплю не удачу за неудачей
И разбил формулу как предложил Gustav,

Но все равно ругается :'( и производил запись перебиванием формулы в ручную шаг за шагом и все равно не удачи :'(
Где мои ошибки почему так происходит
Сама формула:
К сообщению приложен файл: 3868329.xlsm (84.1 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение:'( :'( :'(
ААААААААААААААААА блин ну почемууууу ну что не так то :'( :'( :'(
ПОМОГИТЕ ПЖЛ с решением!!!
Сев за другой комп у меня получилось произвести запись через Macro Recorder

НО стал записывать следующую формулу ((((( терплю не удачу за неудачей
И разбил формулу как предложил Gustav,

Но все равно ругается :'( и производил запись перебиванием формулы в ручную шаг за шагом и все равно не удачи :'(
Где мои ошибки почему так происходит
Сама формула:

Автор - lebensvoll
Дата добавления - 27.01.2021 в 21:31
gling Дата: Четверг, 28.01.2021, 00:19 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Здравствуйте.
Слишком длинные формулы, очень много знаков. думаю по этому VBA и не берет. Попробуйте их загнать в диспетчер имен и потом вставлять по имени. Но в диспетчере тоже есть какое то ограничение по знакам. Если не получится всю формулу загнать в диспетчер, разбейте на несколько и там же соберите или соберите в ячейке.
К сообщению приложен файл: 9898101.xlsm (85.2 Kb)


ЯД-41001506838083
 
Ответить
СообщениеЗдравствуйте.
Слишком длинные формулы, очень много знаков. думаю по этому VBA и не берет. Попробуйте их загнать в диспетчер имен и потом вставлять по имени. Но в диспетчере тоже есть какое то ограничение по знакам. Если не получится всю формулу загнать в диспетчер, разбейте на несколько и там же соберите или соберите в ячейке.

Автор - gling
Дата добавления - 28.01.2021 в 00:19
lebensvoll Дата: Четверг, 28.01.2021, 00:27 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
gling, Спасибо Вам за ответ...
А если я создам "Имена", другие мои макросы не потеряют свою функциональность!?
Я за этим доком уже сижу неделю наверное ((((
То вначале в формулах находишь ошибки - правишь - записываешь макрос
То потом на работе сотрудники либо что то предумают или заметят ошибку и вновь пункт 1 :'(
Если сейчас еще и это проблема случится (пусть она возможно даже и не получится но еще и потеряют функциональность другие макросы с формулами) это будет АААААААА


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщениеgling, Спасибо Вам за ответ...
А если я создам "Имена", другие мои макросы не потеряют свою функциональность!?
Я за этим доком уже сижу неделю наверное ((((
То вначале в формулах находишь ошибки - правишь - записываешь макрос
То потом на работе сотрудники либо что то предумают или заметят ошибку и вновь пункт 1 :'(
Если сейчас еще и это проблема случится (пусть она возможно даже и не получится но еще и потеряют функциональность другие макросы с формулами) это будет АААААААА

Автор - lebensvoll
Дата добавления - 28.01.2021 в 00:27
gling Дата: Четверг, 28.01.2021, 00:31 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
А какая связь между именами и макросами которые не обращаются к новому имени?


ЯД-41001506838083
 
Ответить
СообщениеА какая связь между именами и макросами которые не обращаются к новому имени?

Автор - gling
Дата добавления - 28.01.2021 в 00:31
lebensvoll Дата: Четверг, 28.01.2021, 00:34 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Связь что они обращаются к ячейке а это ячейка имеет ИМЯ (и получится что два имени примерно G31 и втрое его имя стало "к примеру: цен").
 
Ответить
СообщениеСвязь что они обращаются к ячейке а это ячейка имеет ИМЯ (и получится что два имени примерно G31 и втрое его имя стало "к примеру: цен").

Автор - lebensvoll
Дата добавления - 28.01.2021 в 00:34
gling Дата: Четверг, 28.01.2021, 00:40 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Одинаковых имен у вас не будет, а обращаться по имени в Excel это нормально, конфликтов быть не должно.


ЯД-41001506838083
 
Ответить
СообщениеОдинаковых имен у вас не будет, а обращаться по имени в Excel это нормально, конфликтов быть не должно.

Автор - gling
Дата добавления - 28.01.2021 в 00:40
lebensvoll Дата: Четверг, 28.01.2021, 00:53 | Сообщение № 15
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
понял спасибо будем учиться ((((
 
Ответить
Сообщениепонял спасибо будем учиться ((((

Автор - lebensvoll
Дата добавления - 28.01.2021 в 00:53
Gustav Дата: Четверг, 28.01.2021, 19:55 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
И разбил формулу как предложил Gustav,

lebensvoll, очень грустно, но Вы совсем не "вкурили" мой алгоритм из сообщения #4 и, извините, прёте своим первоначально проторенным путём... :(
Прочтите мой алгоритм еще раз внимательно, если действительно хотите успеха в этом деле.

Кстати, я нигде не упоминаю про делёжку строки по последовательности символов "& _" в конце строки (как это делает макрорекордер). Потому что при этом существует ограничение - не больше 25 строк. И оно нам не надо. Тем более, мы выяснили, что при таком подходе как раз и пропадают символы на "сгибах" формулы!

У меня же строки объединяются с помощью начальных фрагментов "strFormula = strFormula & ". И таким способом можно легко объединить не то, что 25 - 100 строк или даже 500.

И делайте всё препарирование формулы в Блокноте! В редакторе VBA среда будет пытаться автоматически подставлять, например, завершающие кавычки. Нам не нужно такой сомнительной услужливости а-ля "словарь T9" в телефоне. В редактор VBA возвращайтесь только на 4-м шаге алгоритма, когда формула уже корректно разбита по отдельным строкам. Ну, я же всё написал...


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
И разбил формулу как предложил Gustav,

lebensvoll, очень грустно, но Вы совсем не "вкурили" мой алгоритм из сообщения #4 и, извините, прёте своим первоначально проторенным путём... :(
Прочтите мой алгоритм еще раз внимательно, если действительно хотите успеха в этом деле.

Кстати, я нигде не упоминаю про делёжку строки по последовательности символов "& _" в конце строки (как это делает макрорекордер). Потому что при этом существует ограничение - не больше 25 строк. И оно нам не надо. Тем более, мы выяснили, что при таком подходе как раз и пропадают символы на "сгибах" формулы!

У меня же строки объединяются с помощью начальных фрагментов "strFormula = strFormula & ". И таким способом можно легко объединить не то, что 25 - 100 строк или даже 500.

И делайте всё препарирование формулы в Блокноте! В редакторе VBA среда будет пытаться автоматически подставлять, например, завершающие кавычки. Нам не нужно такой сомнительной услужливости а-ля "словарь T9" в телефоне. В редактор VBA возвращайтесь только на 4-м шаге алгоритма, когда формула уже корректно разбита по отдельным строкам. Ну, я же всё написал...

Автор - Gustav
Дата добавления - 28.01.2021 в 19:55
Gustav Дата: Пятница, 29.01.2021, 10:53 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Вот, чтобы не пыхтеть вручную в Блокноте и не делать походу случайных ошибок, написал на коленках макрос-визард, реализующий алгоритм из моего сообщения #4.


Макрос выводит в Окно отладки (Ctrl+G в редакторе VBA, если не открыто) текст макроса по созданию формулы из указанной ячейки (ее адрес указывается в константе INS_FORM_ADR визарда). Соответственно, копируете этот текст из Окна отладки, вставляете в модуль книги и запускаете.


В макросе-визарде parseFormulaIntoMacro по желанию можно заменить .FormulaLocal на .FormulaR1C1 (или на любую другую: .Formula или .FormulaR1C1Local).


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 29.01.2021, 10:59
 
Ответить
СообщениеВот, чтобы не пыхтеть вручную в Блокноте и не делать походу случайных ошибок, написал на коленках макрос-визард, реализующий алгоритм из моего сообщения #4.


Макрос выводит в Окно отладки (Ctrl+G в редакторе VBA, если не открыто) текст макроса по созданию формулы из указанной ячейки (ее адрес указывается в константе INS_FORM_ADR визарда). Соответственно, копируете этот текст из Окна отладки, вставляете в модуль книги и запускаете.


В макросе-визарде parseFormulaIntoMacro по желанию можно заменить .FormulaLocal на .FormulaR1C1 (или на любую другую: .Formula или .FormulaR1C1Local).

Автор - Gustav
Дата добавления - 29.01.2021 в 10:53
Gustav Дата: Пятница, 29.01.2021, 12:06 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2697
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
в готовые решения

Серж, я как молодой писатель о большем и мечтать не могу! :D Главное, чтобы ТС, когда проснётся, смог найти эту свою тему. Кстати, надо отдать ему должное, название у темы очень удачное - по сути и никакой воды! :up:


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
в готовые решения

Серж, я как молодой писатель о большем и мечтать не могу! :D Главное, чтобы ТС, когда проснётся, смог найти эту свою тему. Кстати, надо отдать ему должное, название у темы очень удачное - по сути и никакой воды! :up:

Автор - Gustav
Дата добавления - 29.01.2021 в 12:06
RAN Дата: Пятница, 29.01.2021, 12:31 | Сообщение № 19
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
№ 17 делает тему весьма интересной и полезной для готовых решений.
Но неплохо было бы это как-то указать в самом начале, а то могут и не дочитать до самого главного. <_<


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение№ 17 делает тему весьма интересной и полезной для готовых решений.
Но неплохо было бы это как-то указать в самом начале, а то могут и не дочитать до самого главного. <_<

Автор - RAN
Дата добавления - 29.01.2021 в 12:31
lebensvoll Дата: Пятница, 29.01.2021, 12:57 | Сообщение № 20
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Gustav, Спасибо за ответ и еще раз пояснения.
Просто сев за другой комп у меня получилось произвести запись Macro Recorder
Цитата
В таблице в столбце 13 таблицы есть формула:
как раз на ура и последующие также.
А вот с выводом и применение
Цитата
"& _"
я уже нашел просто в просторах инета такое решение (но смысл один разбить формулу) ну а за то что только 25 строк (((( я только узнал
Применение Вашего метода для меня показалось сложным и не стал использовать (я просто не смог сообразить а как мне потом это воткнуть в свои коды)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Пятница, 29.01.2021, 13:00
 
Ответить
СообщениеGustav, Спасибо за ответ и еще раз пояснения.
Просто сев за другой комп у меня получилось произвести запись Macro Recorder
Цитата
В таблице в столбце 13 таблицы есть формула:
как раз на ура и последующие также.
А вот с выводом и применение
Цитата
"& _"
я уже нашел просто в просторах инета такое решение (но смысл один разбить формулу) ну а за то что только 25 строк (((( я только узнал
Применение Вашего метода для меня показалось сложным и не стал использовать (я просто не смог сообразить а как мне потом это воткнуть в свои коды)

Автор - lebensvoll
Дата добавления - 29.01.2021 в 12:57
Мир MS Excel » Вопросы и решения » Готовые решения » Перенос формул в макрос (Excel)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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