nerv, Добрый День! Решение ADO класса действительно очень гениальное :hands: , однако есть одна трудность он не выгружает все данные с листа. А именно на листе 156 000 строк , а он в массив грузит лишь 65536 методом ADO.ToArray() :girl_sad: т.е.
Dim ADO AsNew ADO Dim Arr AsVariant
ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm"
ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк. ПОМОГИТЕ ПОЖАЛУЙСТА
:girl_sad: :girl_sad:
[moder]Перенесено из Готовых решений[/moder] nerv, Добрый День! Решение ADO класса действительно очень гениальное :hands: , однако есть одна трудность он не выгружает все данные с листа. А именно на листе 156 000 строк , а он в массив грузит лишь 65536 методом ADO.ToArray() :girl_sad: т.е.
Dim ADO AsNew ADO Dim Arr AsVariant
ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm"
ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк. ПОМОГИТЕ ПОЖАЛУЙСТА
nerv, ПОДСКАЖИТЕ, пожалуйста, может быть есть ещё вариант уменьшить как-то занимаемую память в целях последующей обработки получаемого массива, а то только загрузла данные в массив , а уже 4,5 Гб оперативки занято. Всего на компе 8 Гб. Но массив ещё нужно будет обработать........Помогите, пожалуйста
nerv, ПОДСКАЖИТЕ, пожалуйста, может быть есть ещё вариант уменьшить как-то занимаемую память в целях последующей обработки получаемого массива, а то только загрузла данные в массив , а уже 4,5 Гб оперативки занято. Всего на компе 8 Гб. Но массив ещё нужно будет обработать........Помогите, пожалуйста SvetaS
так не получается выгрузить в массив. Вернее нужно так выгрузить в массив, чтобы ещё осталось памяти на его обработку и на создание динамического массива, куда даные поедут после обработки
Короче, нужно чтобы заработал:
Dim text_word2() AsVariant ReDim text_word2(0To kki, 0To x)- место ошибки 'Если ошибку отлавливать
" OnErrorResumeNext If Err.Number <> 0Then
Err.Clear EndIf"
Заработал........
Помогите, пожалуйста...........
Michael_S, Добрый День! Подскажите, пожалуйста, как вы обрабатываете 300 000 строк?
У меня Excel 2016, памяти 8 ГБ. А все не могу найти способ обработки. 1.вариант:
Был алгоритм- обрабатывала с помощью
Dim Rng_find As Range
т.е.
Dim text_word2() AsVariant ReDim text_word2(0To kki, 0To x)- место ошибки 'Если ошибку отлавливать
" OnErrorResumeNext If Err.Number <> 0Then
Err.Clear EndIf"
так не получается выгрузить в массив. Вернее нужно так выгрузить в массив, чтобы ещё осталось памяти на его обработку и на создание динамического массива, куда даные поедут после обработки
Короче, нужно чтобы заработал:
Dim text_word2() AsVariant ReDim text_word2(0To kki, 0To x)- место ошибки 'Если ошибку отлавливать
" OnErrorResumeNext If Err.Number <> 0Then
Err.Clear EndIf"
anvg, Добрый День! А как Вы обрабатываете 300 000 строк? Как Вы тестировали
Цитата
Тестировал на файле формата xlsb в Excel 2010 32bit, Win7 64bit. Файл содержал один лист на 300000 строк, 40 столбцов
? У меня операционка Win 7 64-х, Excel 2016 64-х , памяти 8 ГБ. проблемма описана подробнее http:http://www.planetaexcel.ru/forum....EN_1=2) сейчас вот 3-и варианта пробывала. А что Вы делаете? А как Вы обрабатываете 300 000 строк?[i]
anvg, Добрый День! А как Вы обрабатываете 300 000 строк? Как Вы тестировали
Цитата
Тестировал на файле формата xlsb в Excel 2010 32bit, Win7 64bit. Файл содержал один лист на 300000 строк, 40 столбцов
? У меня операционка Win 7 64-х, Excel 2016 64-х , памяти 8 ГБ. проблемма описана подробнее http:http://www.planetaexcel.ru/forum....EN_1=2) сейчас вот 3-и варианта пробывала. А что Вы делаете? А как Вы обрабатываете 300 000 строк?[i]SvetaS
АУ! КТО-ТО МОЖЕТ ПОМОЧЬ, КАК ЗАГРУЗИТЬ ДАННЫЕ В МАССИВ -300 000 СТРОК, С ЦЕЛЬЮ ИХ ПОСЛЕДУЮЩЕЙ ОБРАБОТКИ В АЛГОРИТМЕ, ТАК ЧТОБЫ ЕЩЁ ОСТАЛОСЬ ПАМЯТИ НА ОБРАБОТКУ МАССИВА И НА СОЗДАНИЕ ДИНАМИЧЕСКОГО МАССИВА. АУ! КТО-ТО МОЖЕТ ПОМОЧЬ?
ПОМОГИТЕ ПОЖАЛУЙСТА
АУ! КТО-ТО МОЖЕТ ПОМОЧЬ, КАК ЗАГРУЗИТЬ ДАННЫЕ В МАССИВ -300 000 СТРОК, С ЦЕЛЬЮ ИХ ПОСЛЕДУЮЩЕЙ ОБРАБОТКИ В АЛГОРИТМЕ, ТАК ЧТОБЫ ЕЩЁ ОСТАЛОСЬ ПАМЯТИ НА ОБРАБОТКУ МАССИВА И НА СОЗДАНИЕ ДИНАМИЧЕСКОГО МАССИВА. АУ! КТО-ТО МОЖЕТ ПОМОЧЬ?
Доброе время суток SvetaS вам уже тему на Планете закрыли. И здесь могу за "крик" наказать. Вы лучше создайте в разделе VBA тему, приложите файл с исходными данными (небольшое количество, если нужно брать их с нескольких листов, то на двух листах), опишите что вы хотите с ними сделать, и по данным файла создайте лист результат. Тогда и можно будет думать, можно ли решить задачу через ADO SQL. Пока на вскидку все ваши сообщения посвящены теме о нехватке памяти для массивов, а не тому, что и как вы хотите сделать.
Доброе время суток SvetaS вам уже тему на Планете закрыли. И здесь могу за "крик" наказать. Вы лучше создайте в разделе VBA тему, приложите файл с исходными данными (небольшое количество, если нужно брать их с нескольких листов, то на двух листах), опишите что вы хотите с ними сделать, и по данным файла создайте лист результат. Тогда и можно будет думать, можно ли решить задачу через ADO SQL. Пока на вскидку все ваши сообщения посвящены теме о нехватке памяти для массивов, а не тому, что и как вы хотите сделать.anvg
ОПИСАНИЕ ЗАДАЧИ Есть файл - пример привожу в файле "Дано " на 5 стоках, так как размер данных большой. Всего строк в файле от 150 000 до 300 000 строк. В файле, в колонке "описание товара" приводится описание различного товара через ";". необходимо: 1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле ) 2) количество написанное напротив описания товара в строках с ";" внести в колонку "Кол-во товара" 3) вес написанный напротив упаковки продукции в описании товара внести в отдельную колонку - например 100 гр, или 1,5 кг 4) если указано количество продаж, сделать перевод строки в кг 5) каждой строке, после разложения строк содержащих ";" , по ключевому слову присвоить группу с названием товара в отдельной колонке - чтобы можно было понять что за товар находится в описании строки группы строк выделяются по информации находящейся в описании товара: - Марки компании - Марки бренда Например, Снежный Краб, Крабыч, Своя Линия, Розумна цена, и т.д. - типа продукции например, Икра мойвы, - группы продукции 1, например Икра, Краб Палочки, и т.д. - группы продукции 2, например Морепродукты, Продукты из сурими, и т.д. - состояния продукции (кулинарной обработки) например: в масле, по корейски, по мексикански, охлаждённая, замороженная и т.д. - упаковки продукции (пластик, вакумная упаковка, пресервы, железная банка и т.д.) - количества граммов продукции - вес выделить в кг отдельно, если продукция в штуках
6) после присвоения группы - создать сводную по группам.
Всего строк до 300 000 в таблице. Время на обработку до 30 минут. Памяти 8 ГБ, win 7, Excel 2016 .Ручной вариант обработки не пройдёт.....Наименования продуктов постоянно меняются. Ассортимент меняется ежедневно. Для Любителей Баз данных - да загрузка в базы данных есть, но только после сортировки строк по группам, так как ни в Access, ни в Oracle, ни в 1С - нет такого мощного инструмента по работе со строками.
Предложения об использовании баз данных принимаются только вместе с описанием данного алгоритма обработке на языке той базы, куда будем загружать......
В ЧЁМ ПРОБЛЕММА
ошибку даёт Redim на 111 533 строках на объёме маленьком ошибку не даёт (до 100 строк и до 100 столбцов) - работает нормально......
ОШИБКУ ВЫДАЁТ, когда объявляем новый массив с количество строк увеличенным на необходимое, для разложения строк содержащих ";" место ошибки:
im text_word2() AsVariant ReDim text_word2(0To kki, 0To x)- место ошибки 'Если ошибку отлавливать
" OnErrorResumeNext If Err.Number <> 0Then
Err.Clear EndIf"
- то Excel виснит и уходит в бесконечный цикл, постоянно увеличивая занимаемую память.
ОПИСАНИЕ ЗАДАЧИ Есть файл - пример привожу в файле "Дано " на 5 стоках, так как размер данных большой. Всего строк в файле от 150 000 до 300 000 строк. В файле, в колонке "описание товара" приводится описание различного товара через ";". необходимо: 1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле ) 2) количество написанное напротив описания товара в строках с ";" внести в колонку "Кол-во товара" 3) вес написанный напротив упаковки продукции в описании товара внести в отдельную колонку - например 100 гр, или 1,5 кг 4) если указано количество продаж, сделать перевод строки в кг 5) каждой строке, после разложения строк содержащих ";" , по ключевому слову присвоить группу с названием товара в отдельной колонке - чтобы можно было понять что за товар находится в описании строки группы строк выделяются по информации находящейся в описании товара: - Марки компании - Марки бренда Например, Снежный Краб, Крабыч, Своя Линия, Розумна цена, и т.д. - типа продукции например, Икра мойвы, - группы продукции 1, например Икра, Краб Палочки, и т.д. - группы продукции 2, например Морепродукты, Продукты из сурими, и т.д. - состояния продукции (кулинарной обработки) например: в масле, по корейски, по мексикански, охлаждённая, замороженная и т.д. - упаковки продукции (пластик, вакумная упаковка, пресервы, железная банка и т.д.) - количества граммов продукции - вес выделить в кг отдельно, если продукция в штуках
6) после присвоения группы - создать сводную по группам.
Всего строк до 300 000 в таблице. Время на обработку до 30 минут. Памяти 8 ГБ, win 7, Excel 2016 .Ручной вариант обработки не пройдёт.....Наименования продуктов постоянно меняются. Ассортимент меняется ежедневно. Для Любителей Баз данных - да загрузка в базы данных есть, но только после сортировки строк по группам, так как ни в Access, ни в Oracle, ни в 1С - нет такого мощного инструмента по работе со строками.
Предложения об использовании баз данных принимаются только вместе с описанием данного алгоритма обработке на языке той базы, куда будем загружать......
В ЧЁМ ПРОБЛЕММА
ошибку даёт Redim на 111 533 строках на объёме маленьком ошибку не даёт (до 100 строк и до 100 столбцов) - работает нормально......
ОШИБКУ ВЫДАЁТ, когда объявляем новый массив с количество строк увеличенным на необходимое, для разложения строк содержащих ";" место ошибки:
im text_word2() AsVariant ReDim text_word2(0To kki, 0To x)- место ошибки 'Если ошибку отлавливать
" OnErrorResumeNext If Err.Number <> 0Then
Err.Clear EndIf"
- то Excel виснит и уходит в бесконечный цикл, постоянно увеличивая занимаемую память.SvetaS
Dim n AsLong Dim nn AsLong Dim il AsLong Dim find AsString Dim k, kk, ii, i, j, jj, l, ll, jjj, i1, i2, kkk, j1, j2, j3, i3, jj3, eqmax AsLong Dim ii_find AsLong Dim jj_find AsLong Dim ii_text AsLong Dim jj_text AsLong Dim ii_text_ost AsLong Dim jj_text_ost AsLong Dim txt AsString Dim txt2 AsString Dim txt_p AsString Dim txt_col AsString Dim txt_row AsString Dim txt_out AsString
Dim Rng_find As Range Dim Rng_find1 As Range Dim Rng_text As Range Dim Rng_substitution As Range Dim Rng_out As Range Dim theRange_out As Range Dim Delimiter AsString Dim s_percent AsDouble
Dim Find_word() AsString Dim Find_word2() AsString Dim text_word1() AsString Dim text_word2() AsVariant Dim text_word3() AsString
OnErrorResumeNext Set Rng_find = Range(RefEdit1.Value)
Set Rng_text = Range(RefEdit2.Value) Set Rng_substitution = Range(RefEdit3.Value) Set Rng_out = Range(RefEdit4.Value)
Delimiter = Me.TextBox1
s_percent = CDbl((Me.TextBox4.Value))
OnErrorGoTo0 If Rng_find IsNothingThen
MsgBox "вы не выбрали диапазон какие данные ищем"
Err.Clear Else If Rng_text IsNothingThen
MsgBox "вы не выбрали диапазон в котором ищем данные "
Err.Clear Else
If Rng_out IsNothingThen
MsgBox "вы не выбрали диапазон куда выводить данные"
Err.Clear Else
' переводим в массив 2-ух строк ' 0 строка фраза целиком ' 1 строка разложение по словам ReDim Find_word2(0To2, 0To (jj_find * ii_find)) '
jjj = 1
For i = 1To ii_find For j = 1To jj_find If ((Find_word(i, j) <> "") And (Find_word(i, j) <> " ") And (Find_word(i, j) <> Empty)) Then
Find_word2(0, jjj) = Find_word(i, 0)
Find_word2(1, jjj) = Find_word(i, j)
jjj = jjj + 1 EndIf Next j Next i
'раскладываем по словам диапазон в котором ищем
ii_text = myWord(Rng_text).imyRows
jj_text = myWord(Rng_text).imyColumns ReDim text_word1(1To ii_text, 0To jj_text) ' 0-вой столбец фраза целиком
text_word1 = myWord(Rng_text).iFindword '______________
'перед тем как сравнивать 2-ва массива и класть их в третий разбиваем их
Dim coll_text_word As Collection_: Set coll_text_word = SplitArrayAll(text_word1, ii_find, jj_find, CLng(TextBox3.Text))
Dim coll_Find_word As Collection_: Set coll_Find_word = SplitArrayAll(Find_word, ii_find, jj_find, CLng(TextBox2.Text)) Dim arr_Find_word() AsVariant Dim arr_text_word1() AsVariant Dim my_row AsLong
ActiveWorkbook.Sheets(txt_p).Range(txt_out).Clear Set theRange_out = ActiveWorkbook.Sheets(txt_p).Range(txt_out)
theRange_out = text_word3
my_row = ii_text_ost 'шаг вывода ( считаем коородинаты выведения каждой части ) Next j Next i
'динамический расчёт вставляемого массива от заданной ячейки полбзователем
EndIf EndIf EndIf
Application.ScreenUpdating = True
обновлённый код
Dim n AsLong Dim nn AsLong Dim il AsLong Dim find AsString Dim k, kk, ii, i, j, jj, l, ll, jjj, i1, i2, kkk, j1, j2, j3, i3, jj3, eqmax AsLong Dim ii_find AsLong Dim jj_find AsLong Dim ii_text AsLong Dim jj_text AsLong Dim ii_text_ost AsLong Dim jj_text_ost AsLong Dim txt AsString Dim txt2 AsString Dim txt_p AsString Dim txt_col AsString Dim txt_row AsString Dim txt_out AsString
Dim Rng_find As Range Dim Rng_find1 As Range Dim Rng_text As Range Dim Rng_substitution As Range Dim Rng_out As Range Dim theRange_out As Range Dim Delimiter AsString Dim s_percent AsDouble
Dim Find_word() AsString Dim Find_word2() AsString Dim text_word1() AsString Dim text_word2() AsVariant Dim text_word3() AsString
OnErrorResumeNext Set Rng_find = Range(RefEdit1.Value)
Set Rng_text = Range(RefEdit2.Value) Set Rng_substitution = Range(RefEdit3.Value) Set Rng_out = Range(RefEdit4.Value)
Delimiter = Me.TextBox1
s_percent = CDbl((Me.TextBox4.Value))
OnErrorGoTo0 If Rng_find IsNothingThen
MsgBox "вы не выбрали диапазон какие данные ищем"
Err.Clear Else If Rng_text IsNothingThen
MsgBox "вы не выбрали диапазон в котором ищем данные "
Err.Clear Else
If Rng_out IsNothingThen
MsgBox "вы не выбрали диапазон куда выводить данные"
Err.Clear Else
' переводим в массив 2-ух строк ' 0 строка фраза целиком ' 1 строка разложение по словам ReDim Find_word2(0To2, 0To (jj_find * ii_find)) '
jjj = 1
For i = 1To ii_find For j = 1To jj_find If ((Find_word(i, j) <> "") And (Find_word(i, j) <> " ") And (Find_word(i, j) <> Empty)) Then
Find_word2(0, jjj) = Find_word(i, 0)
Find_word2(1, jjj) = Find_word(i, j)
jjj = jjj + 1 EndIf Next j Next i
'раскладываем по словам диапазон в котором ищем
ii_text = myWord(Rng_text).imyRows
jj_text = myWord(Rng_text).imyColumns ReDim text_word1(1To ii_text, 0To jj_text) ' 0-вой столбец фраза целиком
text_word1 = myWord(Rng_text).iFindword '______________
'перед тем как сравнивать 2-ва массива и класть их в третий разбиваем их
Dim coll_text_word As Collection_: Set coll_text_word = SplitArrayAll(text_word1, ii_find, jj_find, CLng(TextBox3.Text))
Dim coll_Find_word As Collection_: Set coll_Find_word = SplitArrayAll(Find_word, ii_find, jj_find, CLng(TextBox2.Text)) Dim arr_Find_word() AsVariant Dim arr_text_word1() AsVariant Dim my_row AsLong
ActiveWorkbook.Sheets(txt_p).Range(txt_out).Clear Set theRange_out = ActiveWorkbook.Sheets(txt_p).Range(txt_out)
theRange_out = text_word3
my_row = ii_text_ost 'шаг вывода ( считаем коородинаты выведения каждой части ) Next j Next i
'динамический расчёт вставляемого массива от заданной ячейки полбзователем
функции SplitArrayAll,SplitArray взята на сайте EducatedFool , для разбивки по коллекциям для отработки массива частями, согласно рекомендациям The_Prist
функции SplitArrayAll,SplitArray взята на сайте EducatedFool , для разбивки по коллекциям для отработки массива частями, согласно рекомендациям The_PristSvetaS
Так как вопрос вышел за рамки Готового решения по теме "ADO - класс для работы с данными Excel при помощи SQL", переношу его в отдельную тему в раздел ВОПРОСЫ ПО VBA
Так как вопрос вышел за рамки Готового решения по теме "ADO - класс для работы с данными Excel при помощи SQL", переношу его в отдельную тему в раздел ВОПРОСЫ ПО VBAPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
У меня виснет excel, когда доходит до 1,6г памяти, хотя её стоит 8. А вот и мсдн
Цитата
Для 64-разрядной версии Excel 2010 не действует ограничение в 2 ГБ ОЗУ, которое распространяется на 32-разрядные приложения. Таким образом, пользователи 64-разрядной версии Excel 2010 могут создавать книги большего размера. 64-разрядная версия Windows поддерживает больший объем адресуемой памяти, что в полной мере используется 64-разрядной версией Excel. Например, пользователи могут заполнять сетку большим объемом данных по сравнению с предыдущими версиями Excel. При увеличении объемов ОЗУ компьютера приложение Excel может использовать эту дополнительную память для работы со значительно более крупными книгами и масштабирования доступного объема ОЗУ.
У меня виснет excel, когда доходит до 1,6г памяти, хотя её стоит 8. А вот и мсдн
Цитата
Для 64-разрядной версии Excel 2010 не действует ограничение в 2 ГБ ОЗУ, которое распространяется на 32-разрядные приложения. Таким образом, пользователи 64-разрядной версии Excel 2010 могут создавать книги большего размера. 64-разрядная версия Windows поддерживает больший объем адресуемой памяти, что в полной мере используется 64-разрядной версией Excel. Например, пользователи могут заполнять сетку большим объемом данных по сравнению с предыдущими версиями Excel. При увеличении объемов ОЗУ компьютера приложение Excel может использовать эту дополнительную память для работы со значительно более крупными книгами и масштабирования доступного объема ОЗУ.
Для Любителей Баз данных Предложения об использовании баз данных принимаются только вместе с описанием
Как бы делал я. Используем MSSQL,созданм в нем пару процедур. В файле Excel макросом производим предварительную пакетную обработку,инсертим в базу пакетами-увеличивает скорость обработки. Запускаем процедуры,они делают свою работу,последняя из них возвращает сводную таблицу. Были 3 таблицы по 2-4 млн записей,делал выборку в сводную из них за 13 минут. Сервер кушал 500 метров оперативки.
Для Любителей Баз данных Предложения об использовании баз данных принимаются только вместе с описанием
Как бы делал я. Используем MSSQL,созданм в нем пару процедур. В файле Excel макросом производим предварительную пакетную обработку,инсертим в базу пакетами-увеличивает скорость обработки. Запускаем процедуры,они делают свою работу,последняя из них возвращает сводную таблицу. Были 3 таблицы по 2-4 млн записей,делал выборку в сводную из них за 13 минут. Сервер кушал 500 метров оперативки.doober
Сообщение отредактировал doober - Понедельник, 14.09.2015, 22:55
doober, ВЫГЛЯДИТ КЛАССНО , только непонятно. Какую
Цитата
В файле Excel макросом производим предварительную пакетную обработку
? КАК
Цитата
инсертим в базу пакетами
? Здесь весь вопрос какую обработку может тянуть Excel? И какую обработку делаем в базе (какие текстовые функции может использовать язык базы......)?
doober, ВЫГЛЯДИТ КЛАССНО , только непонятно. Какую
Цитата
В файле Excel макросом производим предварительную пакетную обработку
? КАК
Цитата
инсертим в базу пакетами
? Здесь весь вопрос какую обработку может тянуть Excel? И какую обработку делаем в базе (какие текстовые функции может использовать язык базы......)? SvetaS
Вот решение по 1-му пункту: сделано так: Повторение всех столбцов на количество ; в 16-м столбце, и запись результата в CSV Быстрый просчет к-ва строк в итоговом CSV- отсюда Загрузка данных в массив Выгрузка массива на лист
Проверьте на реальных данных. У меня 100 000 отработало за пару минут. Последние два пункта - при большом количестве строк могут быть недоступны - у меня из 100 000 стало 1,2млн, поэтому я бы делал подключение к CSV, поскольку у Вас 2013-й офис - Вам это трудности не составит.
По поводу добавления информации из др. пунктов Предлагаю использовать возможности PowerPivot - будет удобнее, и практичнее.
Если вы имеете в виду брать файлы меньшего размера и делить сами файлы- то это исключенно изначально, так как иначе сводная не получится........
здесь не согласен у меня в примере идет дозапись данных в CSV файл - в конец файла, т.е. если обработать например 30 файлов отдельно с такой дозаписью - потом не составит труда составить сводную на основе такого CSV файла
Вот решение по 1-му пункту: сделано так: Повторение всех столбцов на количество ; в 16-м столбце, и запись результата в CSV Быстрый просчет к-ва строк в итоговом CSV- отсюда Загрузка данных в массив Выгрузка массива на лист
Проверьте на реальных данных. У меня 100 000 отработало за пару минут. Последние два пункта - при большом количестве строк могут быть недоступны - у меня из 100 000 стало 1,2млн, поэтому я бы делал подключение к CSV, поскольку у Вас 2013-й офис - Вам это трудности не составит.
По поводу добавления информации из др. пунктов Предлагаю использовать возможности PowerPivot - будет удобнее, и практичнее.
Если вы имеете в виду брать файлы меньшего размера и делить сами файлы- то это исключенно изначально, так как иначе сводная не получится........
здесь не согласен у меня в примере идет дозапись данных в CSV файл - в конец файла, т.е. если обработать например 30 файлов отдельно с такой дозаписью - потом не составит труда составить сводную на основе такого CSV файла SLAVICK