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

Вход

Регистрация

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

 

= Мир MS Excel/Заполнить массив значений по условию - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнить массив значений по условию (Макросы/Sub)
Заполнить массив значений по условию
pabchek Дата: Четверг, 27.10.2016, 12:40 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
Доброго дня!
Пытаюсь переделать отчет из 1С. Использую функцию IndentLevel и по ее результатам циклом заполняю массив. Строк в отчете около 700. А обработка занимает около 10 минут. Помогите, плз, оптимизировать
Кусок кода цикла. Полностью в файле
[vba]
Код
For св_il = св_метка_nns + 2 To св_nnr
    св_v_il = .Cells(св_il, 1).IndentLevel
    .Cells(св_il, св_метка_nnc - 2).Value = св_v_il
    If св_v_il = 3 Then
        .Cells(св_il, св_метка_nnc - 1).Value = .Cells(св_il, 1).Value
    Else
        .Cells(св_il, св_метка_nnc - 1).Value = .Cells(св_il - 1, св_метка_nnc - 1).Value
    End If
Next
[/vba]
Добавлено
в коде нашел несущественную ошибку, перезалил
К сообщению приложен файл: 3523155.xlsb(19Kb)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092


Сообщение отредактировал pabchek - Четверг, 27.10.2016, 12:53
 
Ответить
СообщениеДоброго дня!
Пытаюсь переделать отчет из 1С. Использую функцию IndentLevel и по ее результатам циклом заполняю массив. Строк в отчете около 700. А обработка занимает около 10 минут. Помогите, плз, оптимизировать
Кусок кода цикла. Полностью в файле
[vba]
Код
For св_il = св_метка_nns + 2 To св_nnr
    св_v_il = .Cells(св_il, 1).IndentLevel
    .Cells(св_il, св_метка_nnc - 2).Value = св_v_il
    If св_v_il = 3 Then
        .Cells(св_il, св_метка_nnc - 1).Value = .Cells(св_il, 1).Value
    Else
        .Cells(св_il, св_метка_nnc - 1).Value = .Cells(св_il - 1, св_метка_nnc - 1).Value
    End If
Next
[/vba]
Добавлено
в коде нашел несущественную ошибку, перезалил

Автор - pabchek
Дата добавления - 27.10.2016 в 12:40
_Boroda_ Дата: Четверг, 27.10.2016, 13:49 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У меня на 800 строк твой макрос отрабатывает моментально

1. Не нужно обращаться к ячейкам листа так часто. Сначала загрузи все в вирт. массив, а потом сразу выгрузи его на лист.
http://perfect-excel.ru/publ....-1-0-74
2. Нет ли у тебя в файле всяких раскрасочек (особенно раскрасок границ ячеек)? Именованных диапазонов лишних? Прочей фигни всякой?
3. Не открыты ли еще какие-то огромные файлы?
4. Вначале макроса отключай обновление экрана Application.ScreenUpdating, пересчет формул Application.Calculation. А перед End - включай


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ меня на 800 строк твой макрос отрабатывает моментально

1. Не нужно обращаться к ячейкам листа так часто. Сначала загрузи все в вирт. массив, а потом сразу выгрузи его на лист.
http://perfect-excel.ru/publ....-1-0-74
2. Нет ли у тебя в файле всяких раскрасочек (особенно раскрасок границ ячеек)? Именованных диапазонов лишних? Прочей фигни всякой?
3. Не открыты ли еще какие-то огромные файлы?
4. Вначале макроса отключай обновление экрана Application.ScreenUpdating, пересчет формул Application.Calculation. А перед End - включай

Автор - _Boroda_
Дата добавления - 27.10.2016 в 13:49
pabchek Дата: Четверг, 27.10.2016, 14:29 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007

эту ссылку знаю, изучаю, но пока не на "ты"
2-3. в самом деле, есть "огромный файл" он и тормозил. Я не знал, что на скорость выполнения "маленького" макроса влияет другой открытый, и вроде как неактивный файл.
4. да, обычно отключаю, в этом случае при отладке думал пусть лучше мигает


"Учиться, учиться и еще раз учиться!"
WM: R399923528092
 
Ответить
Сообщение
эту ссылку знаю, изучаю, но пока не на "ты"
2-3. в самом деле, есть "огромный файл" он и тормозил. Я не знал, что на скорость выполнения "маленького" макроса влияет другой открытый, и вроде как неактивный файл.
4. да, обычно отключаю, в этом случае при отладке думал пусть лучше мигает

Автор - pabchek
Дата добавления - 27.10.2016 в 14:29
Pelena Дата: Четверг, 27.10.2016, 15:33 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9842
Репутация: 2252 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
У нас на форуме тоже есть несколько готовых решений на тему заполнения массива
Считывание диапазона в массив


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеУ нас на форуме тоже есть несколько готовых решений на тему заполнения массива
Считывание диапазона в массив

Автор - Pelena
Дата добавления - 27.10.2016 в 15:33
_Boroda_ Дата: Четверг, 27.10.2016, 15:38 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
5 из 6 в них с Transpose, который не работает с массивами, большими кол-ва строк в старом Excel - 65536
Можно здорово внезапно нарваться.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение5 из 6 в них с Transpose, который не работает с массивами, большими кол-ва строк в старом Excel - 65536
Можно здорово внезапно нарваться.

Автор - _Boroda_
Дата добавления - 27.10.2016 в 15:38
pabchek Дата: Четверг, 27.10.2016, 16:59 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 145 ±
Замечаний: 0% ±

Excel 2007
Почитав матчасть, свой вопрос решил следующим способом:


Летает даже с "огромным" файлом с кучей форматирования и других бяк :)
К сообщению приложен файл: 4430930.xlsb(23Kb)


"Учиться, учиться и еще раз учиться!"
WM: R399923528092


Сообщение отредактировал pabchek - Четверг, 27.10.2016, 17:02
 
Ответить
СообщениеПочитав матчасть, свой вопрос решил следующим способом:


Летает даже с "огромным" файлом с кучей форматирования и других бяк :)

Автор - pabchek
Дата добавления - 27.10.2016 в 16:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнить массив значений по условию (Макросы/Sub)
Страница 1 из 11
Поиск:

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