23.06.2013 15:23
sf13
 
Цитата:
Aleksandr H.
Цитата:
sf13 Или (что то же самое):

Dim n As Range
For Each n In Selection
MyValue = n
MyValue = Replace(MyValue, " ", "")
n.NumberFormat = "@"
n = MyValue
Next:
Есть ли возможность как-ли оптимизировать єтот простой код, а именно ускорить время выполнения? Для массива 6294х4 время выполнения 12 мин :? . В то же время код для OpenOffice Scalc справляется с задачей за чуть больше 1 сек. :)
Александр, если ещё не нашли решение, я бы попробовал:


Application.ScreenUpdating = False 'Это точно поможет
Application.Calculation = xlCalculationManual 'Это поможет при наличии завязанных на редактируемые данные формул

.............................. ' Здесь вся остальная "начинка"
..............................
..............................
..............................

Application.Calculation = xlCalculationAutomatic 'Это вернёт в режим автовычислений
24.06.2013 10:04
Aleksandr H.
 
Цитата:
sf13 Александр, если ещё не нашли решение, я бы попробовал:
Application.ScreenUpdating = False 'Это точно поможет
Application.Calculation = xlCalculationManual 'Это поможет при наличии завязанных на редактируемые данные формул
.............................. ' Здесь вся остальная "начинка"
..............................
..............................
..............................
Application.Calculation = xlCalculationAutomatic 'Это вернёт в режим автовычислений
Время выполнения на массиве 1 048 576 х 2 составляет 4 минуты. С єтих 1048576 строк 1046247 строк "холостых", тоесть в них текста не было. (я выделял не фрагмент, а полностью столбцы - ведь так легше ). Єто привело к увеличению размера файла, что не есть good. Значит надо отловить непустые строки 8-) и время выполнения сократилось с 4 минут до 20 сек.
Код:
Sub ToText()
Dim n As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each n In Selection
MyValue = n
If MyValue <> "" Then 'если ячейка пустая, делаем замены
MyValue = Replace(MyValue, " ", "")
n.NumberFormat = "@"
n = MyValue
End If
Next:
Application.Calculation = xlCalculationAutomatic 
End Sub
24.06.2013 17:14
Goncharov
 
Если интересует анализ и управление запасами, 14 июля провожу семинар в Киеве. Тема семинара «Аналитика в продажах, закупках, маркетинге». Интересно будет менеджерам по закупкам, аналитикам, маркетологам, категорийным менеджерам и ТОП менеджерам предприятий.
Программа семинара и регистрация тут http://atrade.info/seminar-start-kiev.html
24.06.2013 18:59
Aleksandr H.
 
Цитата:
Goncharov Если интересует анализ и управление запасами, 14 июля провожу семинар в Киеве. Тема семинара «Аналитика в продажах, закупках, маркетинге». Интересно будет менеджерам по закупкам, аналитикам, маркетологам, категорийным менеджерам и ТОП менеджерам предприятий.
Программа семинара и регистрация тут http://atrade.info/seminar-start-kiev.html
Как я понял с описания, это информационный семинар без практики? Какие методы покажите в "прогнозировании спроса"? Прогнозируемый товар будет группы AX? ( :shock: я даже расскладку на польскую сменил что-бы написать АХ 8-) )
27.06.2013 19:44
Закупщик56160
 
Добрый день, коллеги помогите, пожалуйста, с формулой в ячейке Н3, с помощью формулы массива я просчитал % сервиса (не поставленное/заказано) за каждую неделю, теперь мне нужно найти средний взвешенный % сервиса за все недели, обычная формула СРЗНАЧ(I3:K3) здесь не подходит, т. к. суммы по каждую неделю слишком сильно отличаются. Пробую сделать формулу массива с диапазоном охватывающим все листы:
=СУММПРОИЗВ(('10неделя:12неделя'!$M$2:$M$782=$G$3)*(('10неделя:12неделя'!$I$2:$I$782)))/СУММПРОИЗВ(('10неделя:12неделя'!$M$2:$M$782=$G$3)*(('10неделя:12неделя'!$G$2:$G$782))),
однако выпадает ССЫЛКА!, подскажите, где ошибка?
Спасибо.
Вложения
Тип файла: xlsx ПРИМЕР.xlsx (48.3 Кб, 137 просмотров)
27.06.2013 20:28
Aleksandr H.
 
Цитата:
Пётр Добрый день, коллеги помогите, пожалуйста, с формулой в ячейке Н3, с помощью формулы массива я просчитал % сервиса (не поставленное/заказано) за каждую неделю, теперь мне нужно найти средний взвешенный % сервиса за все недели, обычная формула СРЗНАЧ(I3:K3) здесь не подходит, т. к. суммы по каждую неделю слишком сильно отличаются. Пробую сделать формулу массива с диапазоном охватывающим все листы:
=СУММПРОИЗВ(('10неделя:12неделя'!$M$2:$M$782=$G$3)*(('10неделя:12неделя'!$I$2:$I$782)))/СУММПРОИЗВ(('10неделя:12неделя'!$M$2:$M$782=$G$3)*(('10неделя:12неделя'!$G$2:$G$782))),
однако выпадает ССЫЛКА!, подскажите, где ошибка?
Спасибо.
Пётр, а какое число Вы хотите чтобы вывелось в результате?


з.ы. имхо в ячейке І3 можно спростить формулу, без умножения массивов ;)

Код:
=1-СУММЕСЛИ('10неделя'!M:M;'TOTAL СПЕЦИАЛИСТЫ'!G3;'10неделя'!I:I)/СУММЕСЛИ('10неделя'!M:M;'TOTAL СПЕЦИАЛИСТЫ'!G3;'10неделя'!G:G)
27.06.2013 21:20
Закупщик56160
 
Я хочу видеть % качества по всем неделям, в данном примере он должен равняться 97,13%, т. е.
сумма (недопоставки, с учёном критерия, неделя 10 + недопоставки, с учёном критерия, неделя 11 + недопоставки, с учёном критерия, неделя 12)/ сумма (заказано, у учётом критерия, неделя 10 + заказано, у учётом критерия, неделя 11 + заказано, у учётом критерия, неделя 12). В одной формуле должны быть объединены диапазоны из 3-х страниц (их будет более 50):

(59990+0+10891,66)/(1517944,59+270182,36+682458,09)= 97,13%

Проблема с заданием диапазонов на разных листах, всё время какая-то ошибка получается.

А формула массива нужна в дальнейшем что менять комбинации критериев, я не стал скидывать весь фаил, много весит.
27.06.2013 23:31
Aleksandr H.
 
Цитата:
Пётр Я хочу видеть % качества по всем неделям, в данном примере он должен равняться 97,13%, т. е.
сумма (недопоставки, с учёном критерия, неделя 10 + недопоставки, с учёном критерия, неделя 11 + недопоставки, с учёном критерия, неделя 12)/ сумма (заказано, у учётом критерия, неделя 10 + заказано, у учётом критерия, неделя 11 + заказано, у учётом критерия, неделя 12). В одной формуле должны быть объединены диапазоны из 3-х страниц (их будет более 50):

(59990+0+10891,66)/(1517944,59+270182,36+682458,09)= 97,13%

Проблема с заданием диапазонов на разных листах, всё время какая-то ошибка получается.

А формула массива нужна в дальнейшем что менять комбинации критериев, я не стал скидывать весь фаил, много весит.
Вы, наверно, читали
Цитата:
Стиль трехмерных ссылок

Трехмерные ссылки используются при необходимости анализа данных из одной и той же ячейки или диапазона ячеек на нескольких листах одной книги. Трехмерная ссылка включает в себя ссылку на ячейку или диапазон, перед которой ставятся имена листов. Microsoft Excel использует все листы, хранящиеся между начальным и конечным именами, указанными в ссылке. Например, формула =СУММ(Лист2:Лист13!B5) суммирует все значения, содержащиеся в ячейке B5 на всех листах в диапазоне от Лист2 до Лист13 включительно.

Трехмерные ссылки могут быть использованы для создания ссылок на ячейки на других листах, определения имен и создания формул с использованием следующих функций: СУММ, СРЗНАЧ, СРЗНАЧА, СЧЁТ, СЧЁТЗ, МАКС, МАКСА, МИН, МИНА, ПРОИЗВЕД, СТАНДОТКЛОН, СТАНДОТКЛОНА, СТАНДОТКЛОНП, СТАНДОТКЛОНПА, ДИСП, ДИСПА, ДИСПР и ДИСПРА.
Трехмерные ссылки нельзя использовать в формулах массива (Формула массива. Формула, выполняющая несколько вычислений над одним или несколькими наборами значений, а затем возвращающая один или несколько результатов. Формулы массива заключены в фигурные скобки { } и вводятся нажатием клавиш CTRL+SHIFT+ВВОД.).
Трехмерные ссылки нельзя использовать вместе с оператором (Оператор. Знак или символ, задающий тип вычисления в выражении. Существуют математические, логические операторы, операторы сравнения и ссылок.) пересечения (пробел), а также в формулах, использующих неявное пересечение (Неявное пересечение. Ссылка на диапазон ячеек вместо одной ячейки, из которого в расчете выбирается одна соответствующая ячейка. Например, если в ячейке C10 содержится формула =B5:B15*5, на 5 будет умножено значение из ячейки B10, потому что ячейки B10 и C10 находятся в одной строке.).


С Вашего позволения изменю названия листов на "неделя10" и тд, те число на конец
Код:
=1-СУММПРОИЗВ(СУММЕСЛИ(ДВССЫЛ("неделя"&СТРОКА(ДВССЫЛ("10:"&(СЧЁТЗ(неделя10:неделя12!$M$2)+9)))&"!M2:M20");$G3;ДВССЫЛ("неделя"&СТРОКА(ДВССЫЛ("10:"&(СЧЁТЗ(неделя10:неделя12!$M$2)+9)))&"!i2:i20")))/СУММПРОИЗВ(СУММЕСЛИ(ДВССЫЛ("неделя"&СТРОКА(ДВССЫЛ("10:"&(СЧЁТЗ(неделя10:неделя12!$M$2)+9)))&"!M2:M20");$G3;ДВССЫЛ("неделя"&СТРОКА(ДВССЫЛ("10:"&(СЧЁТЗ(неделя10:неделя12!$M$2)+9)))&"!G2:G20")))
8-)
28.06.2013 00:37
tgm
 
Aleksandr H,апиридил :cry: Как вариант: сделал на основе функции UDF "СУММЕСЛИ со всех листов" когда-то взятой на "Планете".Может подойдет..
Вложения
Тип файла: xlsm Пример2.xlsm (55.8 Кб, 178 просмотров)
28.06.2013 09:14
Aleksandr H.
 
Цитата:
tgm Aleksandr H,апиридил :cry: Как вариант: сделал на основе функции UDF "СУММЕСЛИ со всех листов" когда-то взятой на "Планете".Может подойдет..
я тоже хочу писать такие UDF :cry:
*/me ушел искать книгу "vba для чайников"
Часовой пояс GMT +3, время: 03:55.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.