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

Вход

Регистрация

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

 

= Мир MS Excel/Деление файла на части по критерию(удаления ненужных строк) - Страница 2 - Мир MS Excel

  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_, DrMini  
Деление файла на части по критерию(удаления ненужных строк)
AndreTM Дата: Понедельник, 28.08.2017, 18:18 | Сообщение № 21
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Я же про "отбор занял три строки". Три строки чего? Кода с двоеточиями? :)

И про "построчное копирование ячеек" никто и не спорит - да, при одинаковом количестве итераций это будет тормозом. А вот если "отбор" будет выполняться суммарно за существенно меньшее количество "телодвижений" (итераций) - то это ускорит алгоритм.

Кстати, насчет "построчного копирования ячеек" ты тоже не совсем прав. Тут ведь смотря что подразумевать под "копированием", ведь использовать <Range>.Copy Destibation:= - никто не предлагает :)
А насколько быстрее "скопировать массив 10000x10 в указанный диапазон" по сравнению со "скопировать 10000 раз массив 1x10 в указанные 10000 диапазонов" - это ещё надо посмотреть. Ведь и в том, и в другом случае запись идет в .Values. И хотя кажется, что во втором случае время скушают итерации цикла - но не забываем, что в первом случае ещё и исполнялось "10000 раз переписать массив 1x10 в массив 1x10" :) - а ведь мы смотрим на суммарное время выполнения.

А про "30 секунд" ТС пишет как про общее время выполнения макроса. А не про время записи файлов - откуда он там время записи файлов-то возьмет? Так что я не удивлюсь, если как раз практически все время затрачивается на выборки, а не на запись файлов. Хотя не забываем ещё и о рефрешах сводов - для чистоты картины надо бы знать время "отборов+записей" без сводов вообще.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеЯ же про "отбор занял три строки". Три строки чего? Кода с двоеточиями? :)

И про "построчное копирование ячеек" никто и не спорит - да, при одинаковом количестве итераций это будет тормозом. А вот если "отбор" будет выполняться суммарно за существенно меньшее количество "телодвижений" (итераций) - то это ускорит алгоритм.

Кстати, насчет "построчного копирования ячеек" ты тоже не совсем прав. Тут ведь смотря что подразумевать под "копированием", ведь использовать <Range>.Copy Destibation:= - никто не предлагает :)
А насколько быстрее "скопировать массив 10000x10 в указанный диапазон" по сравнению со "скопировать 10000 раз массив 1x10 в указанные 10000 диапазонов" - это ещё надо посмотреть. Ведь и в том, и в другом случае запись идет в .Values. И хотя кажется, что во втором случае время скушают итерации цикла - но не забываем, что в первом случае ещё и исполнялось "10000 раз переписать массив 1x10 в массив 1x10" :) - а ведь мы смотрим на суммарное время выполнения.

А про "30 секунд" ТС пишет как про общее время выполнения макроса. А не про время записи файлов - откуда он там время записи файлов-то возьмет? Так что я не удивлюсь, если как раз практически все время затрачивается на выборки, а не на запись файлов. Хотя не забываем ещё и о рефрешах сводов - для чистоты картины надо бы знать время "отборов+записей" без сводов вообще.

Автор - AndreTM
Дата добавления - 28.08.2017 в 18:18
AndreTM Дата: Понедельник, 28.08.2017, 18:21 | Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Iurii, да оставьте вы старый код для обновления сводной :)
Просто возьмите в исходниках диапазон с запасом так, чтобы он тоже чтобы был с пустыми строками, и наложите сразу фильтр, чтобы не показывались "пусто". Тогда и в скопированных сводных этот фильтр сработает и все будет показывать нормально.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеIurii, да оставьте вы старый код для обновления сводной :)
Просто возьмите в исходниках диапазон с запасом так, чтобы он тоже чтобы был с пустыми строками, и наложите сразу фильтр, чтобы не показывались "пусто". Тогда и в скопированных сводных этот фильтр сработает и все будет показывать нормально.

Автор - AndreTM
Дата добавления - 28.08.2017 в 18:21
Iurii Дата: Понедельник, 28.08.2017, 18:28 | Сообщение № 23
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
AndreTM,
Спасибо за совет.
То есть мне можно не применять макрос для обновление границ сводной который Ви написали? Просто прописать использование фильтра который не равно пусто.

А в Ваш код можно добавить обновление?
[vba]
Код

                Dim wsSh As Worksheet, PVTable As PivotTable
                For Each wsSh In .Worksheets
                    For Each PVTable In wsSh.PivotTables
                        PVTable.ChangePivotCache wsSh.Parent. _
                        PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsSh.Parent.Sheets("Исх").[a1].CurrentRegion, _
                        Version:=xlPivotTableVersion15)
                    Next PVTable
                Next wsSh
[/vba]


Сообщение отредактировал Iurii - Понедельник, 28.08.2017, 18:29
 
Ответить
СообщениеAndreTM,
Спасибо за совет.
То есть мне можно не применять макрос для обновление границ сводной который Ви написали? Просто прописать использование фильтра который не равно пусто.

А в Ваш код можно добавить обновление?
[vba]
Код

                Dim wsSh As Worksheet, PVTable As PivotTable
                For Each wsSh In .Worksheets
                    For Each PVTable In wsSh.PivotTables
                        PVTable.ChangePivotCache wsSh.Parent. _
                        PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsSh.Parent.Sheets("Исх").[a1].CurrentRegion, _
                        Version:=xlPivotTableVersion15)
                    Next PVTable
                Next wsSh
[/vba]

Автор - Iurii
Дата добавления - 28.08.2017 в 18:28
Kuzmich Дата: Понедельник, 28.08.2017, 18:41 | Сообщение № 24
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
А мой макрос вы попробовали на большом количестве строк?
 
Ответить
СообщениеА мой макрос вы попробовали на большом количестве строк?

Автор - Kuzmich
Дата добавления - 28.08.2017 в 18:41
KuklP Дата: Понедельник, 28.08.2017, 19:22 | Сообщение № 25
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Так что я не удивлюсь, если как раз практически все время затрачивается на выборки, а не на запись файлов.
О, вижу ты недооцениваешь скорость работы с дисками и листом. Суди сам, см. скрин.

Считал так на 23538 строк:
[vba]
Код
                a = r.Value: n = 1
                t = Timer
                For m = 2 To UBound(a)
                    If a(m, 10) = PodrNow Then n = n + 1: For k = 1 To 10: a(n, k) = a(m, k): Next
                Next
                t = Timer - t
                t1 = t1 + t
                r.ClearContents
                .Sheets("Исх").[a1].Resize(n, 10) = a
                Dim wsSh As Worksheet, PVTable As PivotTable    'обновление всех сводных
'                For Each wsSh In .Worksheets
'                    For Each PVTable In wsSh.PivotTables: PVTable.RefreshTable: Next PVTable
'                Next wsSh
                .Close -1
            End With
        Next i
    fsh = Timer
    Application.ScreenUpdating = True
    MsgBox "Все ОК! Время работы макроса: " & (fsh - st) & vbCrLf & _
   "время отбора   " & t1
[/vba]
К сообщению приложен файл: 1906098.gif (25.5 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Так что я не удивлюсь, если как раз практически все время затрачивается на выборки, а не на запись файлов.
О, вижу ты недооцениваешь скорость работы с дисками и листом. Суди сам, см. скрин.

Считал так на 23538 строк:
[vba]
Код
                a = r.Value: n = 1
                t = Timer
                For m = 2 To UBound(a)
                    If a(m, 10) = PodrNow Then n = n + 1: For k = 1 To 10: a(n, k) = a(m, k): Next
                Next
                t = Timer - t
                t1 = t1 + t
                r.ClearContents
                .Sheets("Исх").[a1].Resize(n, 10) = a
                Dim wsSh As Worksheet, PVTable As PivotTable    'обновление всех сводных
'                For Each wsSh In .Worksheets
'                    For Each PVTable In wsSh.PivotTables: PVTable.RefreshTable: Next PVTable
'                Next wsSh
                .Close -1
            End With
        Next i
    fsh = Timer
    Application.ScreenUpdating = True
    MsgBox "Все ОК! Время работы макроса: " & (fsh - st) & vbCrLf & _
   "время отбора   " & t1
[/vba]

Автор - KuklP
Дата добавления - 28.08.2017 в 19:22
AndreTM Дата: Понедельник, 28.08.2017, 20:14 | Сообщение № 26
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Да не, я всё адекватно оцениваю... А сколько было ключей? 3? 25? 200 не пробовал?
Фиг ли мерять время той части, где работа с памятью? Причем только той части, где "скопируем 10000 раз массив 1x10".
А где время на чтение исходного массива (N раз, между прочим), а где время записи результата - в ячейки? Время очистки от лишних данных места для результата? Замеряй для t1 хотя бы время в диапазоне команд от Set r = , до записи массива a на лист включительно.



Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеДа не, я всё адекватно оцениваю... А сколько было ключей? 3? 25? 200 не пробовал?
Фиг ли мерять время той части, где работа с памятью? Причем только той части, где "скопируем 10000 раз массив 1x10".
А где время на чтение исходного массива (N раз, между прочим), а где время записи результата - в ячейки? Время очистки от лишних данных места для результата? Замеряй для t1 хотя бы время в диапазоне команд от Set r = , до записи массива a на лист включительно.


Автор - AndreTM
Дата добавления - 28.08.2017 в 20:14
KuklP Дата: Понедельник, 28.08.2017, 20:28 | Сообщение № 27
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
:) Андрей, мне кажется ты слегка потерялся в пылу азарта дебатов.
Просьба помочь оптимизировать макрос.
Не стояла задача написать все с нуля.
Таких файлов нужно будет делать 25, исходник будет состоять из 80 тис строк.
Как думаешь 25 выборок(да, именно в памяти! Я именно это предложил в качестве оптимизации) существенно замедлят программу по сравнению с остальным? Короче, это уже спор ради спора. Неинтересно.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение:) Андрей, мне кажется ты слегка потерялся в пылу азарта дебатов.
Просьба помочь оптимизировать макрос.
Не стояла задача написать все с нуля.
Таких файлов нужно будет делать 25, исходник будет состоять из 80 тис строк.
Как думаешь 25 выборок(да, именно в памяти! Я именно это предложил в качестве оптимизации) существенно замедлят программу по сравнению с остальным? Короче, это уже спор ради спора. Неинтересно.

Автор - KuklP
Дата добавления - 28.08.2017 в 20:28
AndreTM Дата: Понедельник, 28.08.2017, 21:11 | Сообщение № 28
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Да кто спорит :)
Понятное дело, что в исходном варианте ТС - действия "удалим строки листа" и занимали ту самую бОльшую часть времени работы макроса.
Замена на "просто отберем нужную информацию в массиве памяти, и разом запишем на лист", естественно, и решает проблему первого узкого места.

Я просто предлагал алгоритм, который, по времени исполнения, - не хуже "варианта из #3". И кто-то высказался о его сомнительности... :D


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеДа кто спорит :)
Понятное дело, что в исходном варианте ТС - действия "удалим строки листа" и занимали ту самую бОльшую часть времени работы макроса.
Замена на "просто отберем нужную информацию в массиве памяти, и разом запишем на лист", естественно, и решает проблему первого узкого места.

Я просто предлагал алгоритм, который, по времени исполнения, - не хуже "варианта из #3". И кто-то высказался о его сомнительности... :D

Автор - AndreTM
Дата добавления - 28.08.2017 в 21:11
KuklP Дата: Понедельник, 28.08.2017, 21:56 | Сообщение № 29
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Да кто спорит

не удивлюсь, если как раз практически все время затрачивается на выборки, а не на запись файлов.
А когда показал время выборки:
Фиг ли мерять время той части, где работа с памятью?

А сколько было ключей? 3? 25? 200 не пробовал?
М-да.. Ладно, давай уже заканчивать yes


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Да кто спорит

не удивлюсь, если как раз практически все время затрачивается на выборки, а не на запись файлов.
А когда показал время выборки:
Фиг ли мерять время той части, где работа с памятью?

А сколько было ключей? 3? 25? 200 не пробовал?
М-да.. Ладно, давай уже заканчивать yes

Автор - KuklP
Дата добавления - 28.08.2017 в 21:56
AndreTM Дата: Понедельник, 28.08.2017, 22:27 | Сообщение № 30
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Да не остановимся, кажется :D
когда показал время выборки:
Не всё время, не всё... И показал время своей выборки, а я говорил про "время у ТС, о котором он заявил". И про количество ключей ты не сказал, на котором свою выборку считал, а это влияющий показатель.

Давай тогда попросим у ТС его данные, чтобы замерить... :D
Или сгенерируем какой-то набор на сотню тысяч записей, и протестим на нём.

Может, кто-нибудь из модераторов не поленится, оформит наш спор в виде отдельной темы? И из этой темы можно наши посты, относящиеся к выяснению именно этих подробностей - туда и закинуть сразу?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеДа не остановимся, кажется :D
когда показал время выборки:
Не всё время, не всё... И показал время своей выборки, а я говорил про "время у ТС, о котором он заявил". И про количество ключей ты не сказал, на котором свою выборку считал, а это влияющий показатель.

Давай тогда попросим у ТС его данные, чтобы замерить... :D
Или сгенерируем какой-то набор на сотню тысяч записей, и протестим на нём.

Может, кто-нибудь из модераторов не поленится, оформит наш спор в виде отдельной темы? И из этой темы можно наши посты, относящиеся к выяснению именно этих подробностей - туда и закинуть сразу?

Автор - AndreTM
Дата добавления - 28.08.2017 в 22:27
Iurii Дата: Вторник, 29.08.2017, 09:42 | Сообщение № 31
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Ребята огромное спасибо за рвение помочь мне в моей проблеме :)
Как только у меня будет конечный файл на более 80 тыс. строк отпишусь по скорости работы, добавлю таймер на отбор.

AndreTM, пока из-за недостатка знаний и времени пользуюсь методом который написал KuklP/, но как только доведу до ума этот макрос (файл на 80 тыс. строк еще не готов и он может отличаться от "пробника" на 13 тыс.) попробую реализовать Ваш метод заодно и приобрету дополнительный опыт VBA.

Kuzmich, пока Ваш макрос не пробовал, так как файла на 80 тыс. у меня еще нет и я только в общих чертах догадываюсь каким он будет, возможно он будет иметь большее количество строк. И пока проверить количество строк в самом большом регионе увы нет возможности. Возможно у одного критерия будет меньше 8000 строк, а может и 15 000. Рисковать не хочу. Но спасибо за идею. возьму на вооружение.
 
Ответить
СообщениеРебята огромное спасибо за рвение помочь мне в моей проблеме :)
Как только у меня будет конечный файл на более 80 тыс. строк отпишусь по скорости работы, добавлю таймер на отбор.

AndreTM, пока из-за недостатка знаний и времени пользуюсь методом который написал KuklP/, но как только доведу до ума этот макрос (файл на 80 тыс. строк еще не готов и он может отличаться от "пробника" на 13 тыс.) попробую реализовать Ваш метод заодно и приобрету дополнительный опыт VBA.

Kuzmich, пока Ваш макрос не пробовал, так как файла на 80 тыс. у меня еще нет и я только в общих чертах догадываюсь каким он будет, возможно он будет иметь большее количество строк. И пока проверить количество строк в самом большом регионе увы нет возможности. Возможно у одного критерия будет меньше 8000 строк, а может и 15 000. Рисковать не хочу. Но спасибо за идею. возьму на вооружение.

Автор - Iurii
Дата добавления - 29.08.2017 в 09:42
Kuzmich Дата: Вторник, 29.08.2017, 11:34 | Сообщение № 32
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
Цитата
Нужен макрос который исходный файл разделит на несколько файлов поменьше и перенесет в них только строки по определенному критерию.

А если сделать одну сводную таблицу и из нее формировать отдельные файлы по городам?
 
Ответить
Сообщение
Цитата
Нужен макрос который исходный файл разделит на несколько файлов поменьше и перенесет в них только строки по определенному критерию.

А если сделать одну сводную таблицу и из нее формировать отдельные файлы по городам?

Автор - Kuzmich
Дата добавления - 29.08.2017 в 11:34
Iurii Дата: Вторник, 29.08.2017, 12:16 | Сообщение № 33
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Решил проблему с ошибкой Отчет сводной таблицы был сохранен без данных. Для обновления отчета используйте команду "обновить данные" victory

Добавил в код 2 строчки:

[vba]
Код

PVTable.PivotCache.Refresh  ' Обновление данных сводной таблицы
PVTable.SaveData = True     ' изменение параметра [b]сохранять исходные данные вместе с файлом[/b] в сводной таблице
[/vba]

Kuzmich, спасибо за идею возьму на вооружение. У меня уже почти готовый макрос с методом KuklP. Но думаю у меня еще будут задания где я смогу применить Вашу идею. :)
 
Ответить
СообщениеРешил проблему с ошибкой Отчет сводной таблицы был сохранен без данных. Для обновления отчета используйте команду "обновить данные" victory

Добавил в код 2 строчки:

[vba]
Код

PVTable.PivotCache.Refresh  ' Обновление данных сводной таблицы
PVTable.SaveData = True     ' изменение параметра [b]сохранять исходные данные вместе с файлом[/b] в сводной таблице
[/vba]

Kuzmich, спасибо за идею возьму на вооружение. У меня уже почти готовый макрос с методом KuklP. Но думаю у меня еще будут задания где я смогу применить Вашу идею. :)

Автор - Iurii
Дата добавления - 29.08.2017 в 12:16
Kuzmich Дата: Вторник, 29.08.2017, 13:32 | Сообщение № 34
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
Посмотрите вариант со сводной таблицей на листе "Исх". Отдельные файлы в той же директории,
что и исходный файл. Макрос запускать при активном листе "Исх"


Сообщение отредактировал Kuzmich - Вторник, 29.08.2017, 13:33
 
Ответить
СообщениеПосмотрите вариант со сводной таблицей на листе "Исх". Отдельные файлы в той же директории,
что и исходный файл. Макрос запускать при активном листе "Исх"

Автор - Kuzmich
Дата добавления - 29.08.2017 в 13:32
Iurii Дата: Вторник, 29.08.2017, 15:18 | Сообщение № 35
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Kuzmich, запустил Ваш макрос и теперь при открытии любого файла Excel параллельно открываются еще 3 файла с названиями Винница Киев и Днепр %)
Как исправить?
 
Ответить
СообщениеKuzmich, запустил Ваш макрос и теперь при открытии любого файла Excel параллельно открываются еще 3 файла с названиями Винница Киев и Днепр %)
Как исправить?

Автор - Iurii
Дата добавления - 29.08.2017 в 15:18
Kuzmich Дата: Вторник, 29.08.2017, 15:46 | Сообщение № 36
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 159 ±
Замечаний: 0% ±

Excel 2003
Цитата
при открытии любого файла Excel параллельно открываются еще 3 файла с названиями Винница Киев и Днепр %)

Макрос должен быть только в файле с исходными данными, а вы, вероятно, прописали его в персональную книгу макросов
 
Ответить
Сообщение
Цитата
при открытии любого файла Excel параллельно открываются еще 3 файла с названиями Винница Киев и Днепр %)

Макрос должен быть только в файле с исходными данными, а вы, вероятно, прописали его в персональную книгу макросов

Автор - Kuzmich
Дата добавления - 29.08.2017 в 15:46
InExSu Дата: Вторник, 29.08.2017, 20:48 | Сообщение № 37
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
у автофильтра помнится, ограничение в ~8100 видимых областей

А что это за ограничение? Отфильтровал 35 тыщ ячеек, когда это ограничение проявится?
К сообщению приложен файл: 0221787.jpg (54.7 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
у автофильтра помнится, ограничение в ~8100 видимых областей

А что это за ограничение? Отфильтровал 35 тыщ ячеек, когда это ограничение проявится?

Автор - InExSu
Дата добавления - 29.08.2017 в 20:48
KuklP Дата: Вторник, 29.08.2017, 21:04 | Сообщение № 38
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
В курсе, чем видимая область(area) отличается от просто ячейки? yes


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеВ курсе, чем видимая область(area) отличается от просто ячейки? yes

Автор - KuklP
Дата добавления - 29.08.2017 в 21:04
KuklP Дата: Вторник, 29.08.2017, 21:30 | Сообщение № 39
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Уточню(пошарил по загашникам) - до 2003 Экса включительно вып список автофильтра содержал не более 1000 значений, начиная с 2007 - 10000. Но метод specialcells нужный для копирования, возвращает диапазон не более 8192 прямоугольных областей. Так было до 2007 включительно. В версиях моложе - не знаю.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеУточню(пошарил по загашникам) - до 2003 Экса включительно вып список автофильтра содержал не более 1000 значений, начиная с 2007 - 10000. Но метод specialcells нужный для копирования, возвращает диапазон не более 8192 прямоугольных областей. Так было до 2007 включительно. В версиях моложе - не знаю.

Автор - KuklP
Дата добавления - 29.08.2017 в 21:30
InExSu Дата: Вторник, 29.08.2017, 23:02 | Сообщение № 40
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Как только у меня будет конечный файл на более 80 тыс. строк

Не будем ждать!
[vba]
Код
Sub ГенераторДобра_InExSu()
'Option Base 1 нужен
'генерирует данные по столбцам из имеющихся ячеек
'случайным образом
'ячейка диапазона должна быть активна.
'шапка таблицы пока не игнорируется.
'Call УскоряемExcel
z = Application.InputBox(Title:="ГенераторДобра", Prompt:="Сколько строк добавить?", Type:=1)
Dim r As Range: Set r = ActiveCell.CurrentRegion
Dim arrZ(): ReDim arrZ(z, 2): Dim arr01()
For Each cl In r.Columns
arr01 = cl.Value
For i = 1 To UBound(arrZ)
arrZ(i, 1) = arr01(Int((UBound(arr01)) * Rnd + 1), 1)
Next
Cells(Cells(Rows.count, cl.Column).End(xlUp).Row + 1, cl.Column).Resize(UBound(arrZ), UBound(arrZ, 2)) = arrZ
Next
'Call УскорениеExcelУбрать
End Sub
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac

Сообщение отредактировал InExSu - Вторник, 29.08.2017, 23:02
 
Ответить
Сообщение
Как только у меня будет конечный файл на более 80 тыс. строк

Не будем ждать!
[vba]
Код
Sub ГенераторДобра_InExSu()
'Option Base 1 нужен
'генерирует данные по столбцам из имеющихся ячеек
'случайным образом
'ячейка диапазона должна быть активна.
'шапка таблицы пока не игнорируется.
'Call УскоряемExcel
z = Application.InputBox(Title:="ГенераторДобра", Prompt:="Сколько строк добавить?", Type:=1)
Dim r As Range: Set r = ActiveCell.CurrentRegion
Dim arrZ(): ReDim arrZ(z, 2): Dim arr01()
For Each cl In r.Columns
arr01 = cl.Value
For i = 1 To UBound(arrZ)
arrZ(i, 1) = arr01(Int((UBound(arr01)) * Rnd + 1), 1)
Next
Cells(Cells(Rows.count, cl.Column).End(xlUp).Row + 1, cl.Column).Resize(UBound(arrZ), UBound(arrZ, 2)) = arrZ
Next
'Call УскорениеExcelУбрать
End Sub
[/vba]

Автор - InExSu
Дата добавления - 29.08.2017 в 23:02
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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