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

Вход

Регистрация

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

 

= Мир MS Excel/Вычисление формулы массива через VBA и запись результата - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вычисление формулы массива через VBA и запись результата (Макросы/Sub)
Вычисление формулы массива через VBA и запись результата
matigovas Дата: Суббота, 31.03.2018, 08:26 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Народ с форума помог с задачей, но теперь она усложнилась. Есть формула массива

Код
=ОКРУГЛВВЕРХ(СУММ(ЕСЛИ(СЧЁТЕСЛИ($H$16:$H$30;$H$16:$H$30)>1;J16:J30/СЧЁТЕСЛИ($H$16:$H$30;$H$16:$H$30);J16:J30)*ЕЧИСЛО($H$16:$H$30));)


и она работает как надо, но проблема в том, что таких формул стало очень много и они тормозят работу как Excel, так и людей. Формулы массива идут последовательно в строке начиная со столбца J и грубо говоря до "бесконечности". Самый простой выход, который я вижу - это вычисление формул массива через макрос по нажатию кнопки и помещение результата, скажем в ячейку J15 и дальше по строке. Т.е. само вычисление происходит внутри vba, а итогом становится лишь результат в ячейке.
 
Ответить
СообщениеНарод с форума помог с задачей, но теперь она усложнилась. Есть формула массива

Код
=ОКРУГЛВВЕРХ(СУММ(ЕСЛИ(СЧЁТЕСЛИ($H$16:$H$30;$H$16:$H$30)>1;J16:J30/СЧЁТЕСЛИ($H$16:$H$30;$H$16:$H$30);J16:J30)*ЕЧИСЛО($H$16:$H$30));)


и она работает как надо, но проблема в том, что таких формул стало очень много и они тормозят работу как Excel, так и людей. Формулы массива идут последовательно в строке начиная со столбца J и грубо говоря до "бесконечности". Самый простой выход, который я вижу - это вычисление формул массива через макрос по нажатию кнопки и помещение результата, скажем в ячейку J15 и дальше по строке. Т.е. само вычисление происходит внутри vba, а итогом становится лишь результат в ячейке.

Автор - matigovas
Дата добавления - 31.03.2018 в 08:26
RAN Дата: Суббота, 31.03.2018, 09:14 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Самый простой выход, который я вижу - это вычисление формул массива через макрос

является, на самом деле, самым сложным.
Самый простой - ознакомиться с правилами, и снова задать вопрос.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Самый простой выход, который я вижу - это вычисление формул массива через макрос

является, на самом деле, самым сложным.
Самый простой - ознакомиться с правилами, и снова задать вопрос.

Автор - RAN
Дата добавления - 31.03.2018 в 09:14
matigovas Дата: Понедельник, 02.04.2018, 21:40 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Самый простой

самый простой это давать полезные советы

частично я разобрался с этой формулой, выложу, может поможет кому-то, только под другой диапазон, вот часть кода

[vba]
Код
Sub macros()
With Range("X15")
.FormulaArray = _
"=ROUNDUP(SUM(IF(COUNTIF(R25C22:R2000C22,R25C22:R2000C22)>1,R[10]C[-2]:R[1985]C[-2]/COUNTIF(R25C22:R2000C22,R25C22:R2000C22),R[10]C[-2]:R[1985]C[-2])*ISNUMBER(R25C22:R2000C22)),)"
.Calculate
End With
End Sub
[/vba]
в ячейку X15 записывается указанная в первом посте формула, однако мне бы не саму формулу, а уже результат, пока что я не могу найти нужную команду для постановки результата вычисления


Сообщение отредактировал matigovas - Понедельник, 02.04.2018, 21:48
 
Ответить
Сообщение
Самый простой

самый простой это давать полезные советы

частично я разобрался с этой формулой, выложу, может поможет кому-то, только под другой диапазон, вот часть кода

[vba]
Код
Sub macros()
With Range("X15")
.FormulaArray = _
"=ROUNDUP(SUM(IF(COUNTIF(R25C22:R2000C22,R25C22:R2000C22)>1,R[10]C[-2]:R[1985]C[-2]/COUNTIF(R25C22:R2000C22,R25C22:R2000C22),R[10]C[-2]:R[1985]C[-2])*ISNUMBER(R25C22:R2000C22)),)"
.Calculate
End With
End Sub
[/vba]
в ячейку X15 записывается указанная в первом посте формула, однако мне бы не саму формулу, а уже результат, пока что я не могу найти нужную команду для постановки результата вычисления

Автор - matigovas
Дата добавления - 02.04.2018 в 21:40
Hugo Дата: Понедельник, 02.04.2018, 23:18 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
После .calculate допишите .value=.value
Хотя если пересчёт на автомате - думаю принудительно пересчитывать ещё раз лишнее.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Понедельник, 02.04.2018, 23:19
 
Ответить
СообщениеПосле .calculate допишите .value=.value
Хотя если пересчёт на автомате - думаю принудительно пересчитывать ещё раз лишнее.

Автор - Hugo
Дата добавления - 02.04.2018 в 23:18
matigovas Дата: Понедельник, 02.04.2018, 23:40 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
После .calculate допишите .value=.value

помогло, спасибо, почему-то я не могу понять, сама формула массива в R1C1 выглядит как
Код
=ОКРУГЛВВЕРХ(СУММ(ЕСЛИ(СЧЁТЕСЛИ(R25C85:R2000C85;R25C85:R2000C85)>1;R[3]C:R[1978]C/СЧЁТЕСЛИ(R25C85:R2000C85;R25C85:R2000C85);R[3]C:R[1978]C)*ЕЧИСЛО(R25C85:R2000C85));)


но при записи ее через макрорекодер она изменяется на
Код
=ROUNDUP(SUM(IF(COUNTIF(R25C85:R2000C85,R25C85:R2000C85)>1,R[10]C[76]:R[1985]C[76]/COUNTIF(R25C85:R2000C85,R25C85:R2000C85),R[10]C[76]:R[1985]C[76])*ISNUMBER(R25C85:R2000C85)),)"

по непонятной для меня причине происходит "сдвиг" адреса, есть предположение, что первом случае это адрес формулы, которая "над" столбцом R[3]C:R[1978]C а во втором случае "сдвиг" это адрес относительно той ячейки куда помещается результат вычисления


Сообщение отредактировал matigovas - Понедельник, 02.04.2018, 23:48
 
Ответить
Сообщение
После .calculate допишите .value=.value

помогло, спасибо, почему-то я не могу понять, сама формула массива в R1C1 выглядит как
Код
=ОКРУГЛВВЕРХ(СУММ(ЕСЛИ(СЧЁТЕСЛИ(R25C85:R2000C85;R25C85:R2000C85)>1;R[3]C:R[1978]C/СЧЁТЕСЛИ(R25C85:R2000C85;R25C85:R2000C85);R[3]C:R[1978]C)*ЕЧИСЛО(R25C85:R2000C85));)


но при записи ее через макрорекодер она изменяется на
Код
=ROUNDUP(SUM(IF(COUNTIF(R25C85:R2000C85,R25C85:R2000C85)>1,R[10]C[76]:R[1985]C[76]/COUNTIF(R25C85:R2000C85,R25C85:R2000C85),R[10]C[76]:R[1985]C[76])*ISNUMBER(R25C85:R2000C85)),)"

по непонятной для меня причине происходит "сдвиг" адреса, есть предположение, что первом случае это адрес формулы, которая "над" столбцом R[3]C:R[1978]C а во втором случае "сдвиг" это адрес относительно той ячейки куда помещается результат вычисления

Автор - matigovas
Дата добавления - 02.04.2018 в 23:40
InExSu Дата: Четверг, 05.04.2018, 23:34 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!
при записи ее через макрорекодер она изменяется на

=ОКРУГЛВВЕРХ


Макрорекордер записывает функции листа на английском. А Вы нам показываете на русском.
Какие действия скрыты?


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!
при записи ее через макрорекодер она изменяется на

=ОКРУГЛВВЕРХ


Макрорекордер записывает функции листа на английском. А Вы нам показываете на русском.
Какие действия скрыты?

Автор - InExSu
Дата добавления - 05.04.2018 в 23:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вычисление формулы массива через VBA и запись результата (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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