Уважаемые господа. Ни как не могу найти на просторах интернета ответ на вопрос. Можно ли как то единой командой вывести часть взятого уже в память массива?
Пример условный. x=Range("A1:H50")
For i=1 to ubound(x)
..... Нашли последовательность нужную, всегда идут подряд например 5-10 строк массива И вот ее вывести единой командой возможно? Не используя циклы? Нужна скорость обработки, объемы большие... Думал про сбор в другой массив, но никак не получится определить его размерность, т.к. после найденных блоков надо вставлять дополнительные строки с итогами и опять проводить манипуляции...
Что то типа от x(4,1) до x(12,10) Выкинуть на лист 1 надо (наверное так оптимальнее...)
next i
Выручайте! Есть идеи как все это дело сотворить? Опять же главное скорость!!! Данных много! За ранее спасибо.
Уважаемые господа. Ни как не могу найти на просторах интернета ответ на вопрос. Можно ли как то единой командой вывести часть взятого уже в память массива?
Пример условный. x=Range("A1:H50")
For i=1 to ubound(x)
..... Нашли последовательность нужную, всегда идут подряд например 5-10 строк массива И вот ее вывести единой командой возможно? Не используя циклы? Нужна скорость обработки, объемы большие... Думал про сбор в другой массив, но никак не получится определить его размерность, т.к. после найденных блоков надо вставлять дополнительные строки с итогами и опять проводить манипуляции...
Что то типа от x(4,1) до x(12,10) Выкинуть на лист 1 надо (наверное так оптимальнее...)
next i
Выручайте! Есть идеи как все это дело сотворить? Опять же главное скорость!!! Данных много! За ранее спасибо. Timber_Wolf
Сообщение отредактировал Timber_Wolf - Вторник, 08.11.2016, 13:16
Вот тоже решение нашел вроде без циклов... =)) Надо обкатать =)))
[vba]
Код
Dim x, y() x = Range("A1:E20").Value ReDim y(1 To 2, 1 To 4) 'извлекаем строки с 3 по 8, столбцы со 2 по 4 With Application y() = .Index(x, [Row(3:8)], .Transpose([Row(2:4)])) End With Range("G1").Resize(UBound(y), UBound(y, 2)).Value = y()
[/vba]
Если что тему можно закрывать... Времени ждать другие решения нет. Сроки поджимают.
Излишнее цитирование удалено
Спасибо. Попробую. Но опять же циклы...
Вот тоже решение нашел вроде без циклов... =)) Надо обкатать =)))
[vba]
Код
Dim x, y() x = Range("A1:E20").Value ReDim y(1 To 2, 1 To 4) 'извлекаем строки с 3 по 8, столбцы со 2 по 4 With Application y() = .Index(x, [Row(3:8)], .Transpose([Row(2:4)])) End With Range("G1").Resize(UBound(y), UBound(y, 2)).Value = y()
[/vba]
Если что тему можно закрывать... Времени ждать другие решения нет. Сроки поджимают. Timber_Wolf
Сообщение отредактировал Timber_Wolf - Вторник, 08.11.2016, 13:36
[/vba] При явном указании цифрами столбцов и строк работает. А при подстановке нужных переменных вычисленных ранее в цикле r1,r2 (строки) и c1,c2 (столбцы) перестает работать и выдает ошибку...
Упс. Про закрытие рано я написал... Как подкорректировать строку что бы срабатывала [vba]
[/vba] При явном указании цифрами столбцов и строк работает. А при подстановке нужных переменных вычисленных ранее в цикле r1,r2 (строки) и c1,c2 (столбцы) перестает работать и выдает ошибку...Timber_Wolf
Красота! Именно! Только осталось выяснить как победить если в последовательности только одна строка. Т.е. повторений не было... При выводе одно строчного массива умирает на этом фрагменте... [vba]
Красота! Именно! Только осталось выяснить как победить если в последовательности только одна строка. Т.е. повторений не было... При выводе одно строчного массива умирает на этом фрагменте... [vba]
Вопрос побежден и снят =)) Выручает конструкция [vba]
Код
if r1<>r2 then Range("N1").Resize(UBound(y), UBound(y, 2)).Value = y() else Range("N1").Resize(, UBound(x, 2)).Value = Application.Index(x,r1, 0) end if
[/vba]
_Boroda_, Огромное спасибо за уделенное время. +1 в карму послал. =)))
Вопрос побежден и снят =)) Выручает конструкция [vba]
Код
if r1<>r2 then Range("N1").Resize(UBound(y), UBound(y, 2)).Value = y() else Range("N1").Resize(, UBound(x, 2)).Value = Application.Index(x,r1, 0) end if
[/vba]
_Boroda_, Огромное спасибо за уделенное время. +1 в карму послал. =))) Timber_Wolf
krosav4ig, Отличное замечание! Часто переходит в этот режим при отправке по эл. почте... До сих пор понять не могу почему так происходит! Взял на заметку! +1 в карму!
krosav4ig, Отличное замечание! Часто переходит в этот режим при отправке по эл. почте... До сих пор понять не могу почему так происходит! Взял на заметку! +1 в карму! Timber_Wolf
Господа эксперты. Подниму завесу. Делаю банальное суммирование, аналог функции Excel "Вкладка Данные" - "Промежуточный итог", т.к. данная функция работает час-два с данным объемом данных (причину понять не могу, раньше справлялась за 5-10 мин), теперь руководство требует быстрее свои отчеты, Excel начинает подводить... VBA творит чудеса и на много быстрее.
Именно на этом же примере я делаю свой аналог. Объем входящих данных 4900+ строк на <=12 столбцов (объем будет рости но только в строчном параметре) По тестировал. Результаты скорости выполнения колеблются в пределах 1 м - 1м 10 с
Полагаю тормозит частая запись данных блоками на лист. Т.к. из таблицы в 4900+ строк и из них 2171 раз была запись блоком на другой лист+ запись итоговой суммы по блоку
А можно как нибудь ускорить работу данного решения? Не нравится просто то что Excel виснет при выполнении секунд через 10-15 и можно подумать что он умер =))) Пытался отразить % выполнения в статус баре, все равно замирает и "не отвечает" до конца выполнения...
Много букАв, понимаю. Пытался как можно подробнее описать. =)
Суть вопроса. Можно все это сделать с выводом на лист один раз? =) Раньше делал через 2 массива (другие свои работы) с разовым выводом. Летают только в путь. А тут не могу размерность ему задать правильно, или знаний не хватает... Тык ните носом? Или помогите реализовать? =))
ПыСы: Коллекция массивов не мой вариант? Я с ним вообще не работал... И не знаю его...
Господа эксперты. Подниму завесу. Делаю банальное суммирование, аналог функции Excel "Вкладка Данные" - "Промежуточный итог", т.к. данная функция работает час-два с данным объемом данных (причину понять не могу, раньше справлялась за 5-10 мин), теперь руководство требует быстрее свои отчеты, Excel начинает подводить... VBA творит чудеса и на много быстрее.
Именно на этом же примере я делаю свой аналог. Объем входящих данных 4900+ строк на <=12 столбцов (объем будет рости но только в строчном параметре) По тестировал. Результаты скорости выполнения колеблются в пределах 1 м - 1м 10 с
Полагаю тормозит частая запись данных блоками на лист. Т.к. из таблицы в 4900+ строк и из них 2171 раз была запись блоком на другой лист+ запись итоговой суммы по блоку
А можно как нибудь ускорить работу данного решения? Не нравится просто то что Excel виснет при выполнении секунд через 10-15 и можно подумать что он умер =))) Пытался отразить % выполнения в статус баре, все равно замирает и "не отвечает" до конца выполнения...
Много букАв, понимаю. Пытался как можно подробнее описать. =)
Суть вопроса. Можно все это сделать с выводом на лист один раз? =) Раньше делал через 2 массива (другие свои работы) с разовым выводом. Летают только в путь. А тут не могу размерность ему задать правильно, или знаний не хватает... Тык ните носом? Или помогите реализовать? =))
ПыСы: Коллекция массивов не мой вариант? Я с ним вообще не работал... И не знаю его... Timber_Wolf
Сообщение отредактировал Timber_Wolf - Среда, 09.11.2016, 09:05
[p.s.]Интересно, сколько слов в "Словаре матерных выражений русского языка"?[/p.s.] Максим, вот это все нужно было в своем первом сообщении написать Только тема должна тогда называться совсем не так. На вопрос из Вашего первого поста Вы ответ получили. "Поднимание завесы" привело к пониманию, что у Вас вообще совершенно другой вопрос. На который, согласно Правилам, нужна отдельная тема.
[p.s.]Интересно, сколько слов в "Словаре матерных выражений русского языка"?[/p.s.] Максим, вот это все нужно было в своем первом сообщении написать Только тема должна тогда называться совсем не так. На вопрос из Вашего первого поста Вы ответ получили. "Поднимание завесы" привело к пониманию, что у Вас вообще совершенно другой вопрос. На который, согласно Правилам, нужна отдельная тема.
_Boroda_, Каюсь =) Но что сделано, то сделано =))) На будущее учту =))) Только что проверил обычная функция заработала... =)) Проблему точно указать не могу, лишь могу предположить что мешали ссылки на источник данных какой то... =)) От куда он взялся понятия не имею, но так же сам и пропал на следующий день, после перезагрузки компа =))) Т.е. сегодня уже все штатно работает. Зато я успел накидать за вчера свою функцию и вам всем нервы потрепать =))) Не дадим мозгу засохнуть... Вопрос закрыт =))
_Boroda_, Каюсь =) Но что сделано, то сделано =))) На будущее учту =))) Только что проверил обычная функция заработала... =)) Проблему точно указать не могу, лишь могу предположить что мешали ссылки на источник данных какой то... =)) От куда он взялся понятия не имею, но так же сам и пропал на следующий день, после перезагрузки компа =))) Т.е. сегодня уже все штатно работает. Зато я успел накидать за вчера свою функцию и вам всем нервы потрепать =))) Не дадим мозгу засохнуть... Вопрос закрыт =))Timber_Wolf