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

Вход

Регистрация

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

 

= Мир MS Excel/Загрузить данные в массив 300 000 строк - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Загрузить данные в массив 300 000 строк (Макросы/Sub)
Загрузить данные в массив 300 000 строк
miver Дата: Четверг, 17.09.2015, 08:59 | Сообщение № 21
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
SvetaS, Выложу пример загрузки простым открытием файла в памяти (сделал под Ваш файл 7050606.xlsx, нужно поместить два файла в одну папку)
У меня спокойно загружается размер 100000+ строк в массив за пару секунд
Также можно не выгружать в массив, а работать напрямую с листом данных
К сообщению приложен файл: 0269041.xlsb (13.5 Kb)
 
Ответить
СообщениеSvetaS, Выложу пример загрузки простым открытием файла в памяти (сделал под Ваш файл 7050606.xlsx, нужно поместить два файла в одну папку)
У меня спокойно загружается размер 100000+ строк в массив за пару секунд
Также можно не выгружать в массив, а работать напрямую с листом данных

Автор - miver
Дата добавления - 17.09.2015 в 08:59
SLAVICK Дата: Четверг, 17.09.2015, 09:36 | Сообщение № 22
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
У меня спокойно загружается размер 100000+ строк в массив за пару секунд

miver, Тут вопрос не в том чтобы считать данные с листа в массив, а :
1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле )

и дальнейшие пункты :D
См. мой предыдущий пост - что получилось только при выполнении 1-го пункта ^_^

- у меня из 100 000 стало 1,2млн
:o

SvetaS - по поводу остальных пунктов - много слов в посте - а примера ИТОГОВОГО разбора и присвоения - нет.
Сделайте пример - повыделяйте цветом что добавили и куда... т.е. какие столбцы добавлены к первоначальному файлу, какие данные в него внесены из "справочника"(2-го файла) и в примечаниях кратко опишите откуда тянуть данные и условия.

Зы и еще зачем 3-и поля на дату? достаточно просто даты - а месяц и год - потом легко вычисляются.... Может какие-то столбцы вообще не нужны?


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 17.09.2015, 09:51
 
Ответить
Сообщение
У меня спокойно загружается размер 100000+ строк в массив за пару секунд

miver, Тут вопрос не в том чтобы считать данные с листа в массив, а :
1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле )

и дальнейшие пункты :D
См. мой предыдущий пост - что получилось только при выполнении 1-го пункта ^_^

- у меня из 100 000 стало 1,2млн
:o

SvetaS - по поводу остальных пунктов - много слов в посте - а примера ИТОГОВОГО разбора и присвоения - нет.
Сделайте пример - повыделяйте цветом что добавили и куда... т.е. какие столбцы добавлены к первоначальному файлу, какие данные в него внесены из "справочника"(2-го файла) и в примечаниях кратко опишите откуда тянуть данные и условия.

Зы и еще зачем 3-и поля на дату? достаточно просто даты - а месяц и год - потом легко вычисляются.... Может какие-то столбцы вообще не нужны?

Автор - SLAVICK
Дата добавления - 17.09.2015 в 09:36
SvetaS Дата: Суббота, 19.09.2015, 21:30 | Сообщение № 23
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK, огромное СПАСИБО. ЭТО САМАЯ ЗАМЕЧАТЕЛЬНАЯ ИДЕЯ hands hands hands , добавлять новые строки не в массив , а в вспомогательный файл.
thumb thumb
Подскажите, только, пожалуйста:
если заменить строку [vba]
Код
mF = [a1].CurrentRegion
[/vba]
на строку [vba]
Код
  Dim ADO As New ADO
     Dim mF As Variant
     ADO.DataSource = "G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls"    ' полный путь к книге
     ADO.Query ("SELECT * FROM [exim_ua_2015_1_8_рыб$]")
     mF = ADO.ToArray()    ' записать результат выполнения запроса в массив
     
[/vba]

как тогда изменить модуль?

[vba]
Код

n = FreeFile() 'функция FreeFile возвращает целое число, представляющее номер файла, доступный для использования в выражении Open.
On Error Resume Next
If Filename = "" Then Filename = "G:\РАЗРАБОТКА_2" & "\file.csv"
Open Filename For Append As #n

For i = 1 To UBound(mF) 'служит для определения верхней границы (индекса самого последнего элемента) массива по заданному измерению
     If InStr(1, mF(i, 16), ";") > 0 Then
         mt = Split(mF(i, 16), ";")
         ReDim m(1 To UBound(mt) + 1, 1 To 34)
         For ii = 1 To 34
             If ii = 16 Then
                 For iii = 0 To UBound(mt)
                 m(iii + 1, ii) = mt(iii)
                 Next
             Else
                 For iii = 0 To UBound(mt)
                 m(iii + 1, ii) = mF(i, ii)
                 Next
             End If
         Next
     Else
         ReDim m(1 To 1, 1 To 34)
         For ii = 1 To 34
             m(1, ii) = mF(i, ii)
         Next
     End If
     txt_write_from_Mas m, n
If i Mod 100 = 0 Then ' Mod - оператор делит число на 100 и возвращает остаток
DoEvents  'прерывание выполнения бесконеного цикла с помощью комбинацци клавиш Ctrl+Break                           ' передача управления другим процессам
Application.StatusBar = "Обработка записи " & Format(i / UBound(mF), "0%") & ". " & i & " из " & UBound(mF) 'отображаем в строке состояния какую запись обрабатываем
End If
Next
Application.StatusBar = False ' обнуляем строку состояния
Close #n

nM = TXT_N(Filename) ' быстрый просчет строк
m = Nothing: mF = Nothing: mt = Nothing

ReDim mfull(1 To nM, 1 To 34)
TXT_ToMas mfull, Filename$ ' перегон текста в массив

Sheets.Add
[a1].Resize(UBound(mfull), UBound(mfull, 2)) = mfull ' выгрузка массива на лист
End Sub
[/vba]
 
Ответить
СообщениеSLAVICK, огромное СПАСИБО. ЭТО САМАЯ ЗАМЕЧАТЕЛЬНАЯ ИДЕЯ hands hands hands , добавлять новые строки не в массив , а в вспомогательный файл.
thumb thumb
Подскажите, только, пожалуйста:
если заменить строку [vba]
Код
mF = [a1].CurrentRegion
[/vba]
на строку [vba]
Код
  Dim ADO As New ADO
     Dim mF As Variant
     ADO.DataSource = "G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls"    ' полный путь к книге
     ADO.Query ("SELECT * FROM [exim_ua_2015_1_8_рыб$]")
     mF = ADO.ToArray()    ' записать результат выполнения запроса в массив
     
[/vba]

как тогда изменить модуль?

[vba]
Код

n = FreeFile() 'функция FreeFile возвращает целое число, представляющее номер файла, доступный для использования в выражении Open.
On Error Resume Next
If Filename = "" Then Filename = "G:\РАЗРАБОТКА_2" & "\file.csv"
Open Filename For Append As #n

For i = 1 To UBound(mF) 'служит для определения верхней границы (индекса самого последнего элемента) массива по заданному измерению
     If InStr(1, mF(i, 16), ";") > 0 Then
         mt = Split(mF(i, 16), ";")
         ReDim m(1 To UBound(mt) + 1, 1 To 34)
         For ii = 1 To 34
             If ii = 16 Then
                 For iii = 0 To UBound(mt)
                 m(iii + 1, ii) = mt(iii)
                 Next
             Else
                 For iii = 0 To UBound(mt)
                 m(iii + 1, ii) = mF(i, ii)
                 Next
             End If
         Next
     Else
         ReDim m(1 To 1, 1 To 34)
         For ii = 1 To 34
             m(1, ii) = mF(i, ii)
         Next
     End If
     txt_write_from_Mas m, n
If i Mod 100 = 0 Then ' Mod - оператор делит число на 100 и возвращает остаток
DoEvents  'прерывание выполнения бесконеного цикла с помощью комбинацци клавиш Ctrl+Break                           ' передача управления другим процессам
Application.StatusBar = "Обработка записи " & Format(i / UBound(mF), "0%") & ". " & i & " из " & UBound(mF) 'отображаем в строке состояния какую запись обрабатываем
End If
Next
Application.StatusBar = False ' обнуляем строку состояния
Close #n

nM = TXT_N(Filename) ' быстрый просчет строк
m = Nothing: mF = Nothing: mt = Nothing

ReDim mfull(1 To nM, 1 To 34)
TXT_ToMas mfull, Filename$ ' перегон текста в массив

Sheets.Add
[a1].Resize(UBound(mfull), UBound(mfull, 2)) = mfull ' выгрузка массива на лист
End Sub
[/vba]

Автор - SvetaS
Дата добавления - 19.09.2015 в 21:30
SvetaS Дата: Суббота, 19.09.2015, 22:10 | Сообщение № 24
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK, и ещё такой вопрос , можно ли как-то уйти от объявления [vba]
Код
  Const BUFSIZE As Long = 100000
[/vba],
в функции Private Function TXT_N(Filename$) As Double, т.е. чтобы число обрабатываемых строк определялось динамически?
 
Ответить
СообщениеSLAVICK, и ещё такой вопрос , можно ли как-то уйти от объявления [vba]
Код
  Const BUFSIZE As Long = 100000
[/vba],
в функции Private Function TXT_N(Filename$) As Double, т.е. чтобы число обрабатываемых строк определялось динамически?

Автор - SvetaS
Дата добавления - 19.09.2015 в 22:10
SLAVICK Дата: Понедельник, 21.09.2015, 09:22 | Сообщение № 25
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
если заменить строку .... G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls" 


Тогда уже лучше так:
[vba]
Код
       Dim xlWb As Workbook
     MyBook = "G:\РАЗРАБОТКА_2\данно\exim_ua_2015_1-8_рыб.xls"
     Set xlWb = Workbooks.Open(MyBook)
     MF = ActiveSheet.UsedRange.Value
     xlWb.Close False
[/vba]
Только учтите, что в книге .xls у будет не больше 65тыс. строк. - используйте .xlsm или .xlsb
как тогда изменить модуль?

А зачем его менять?
, можно ли как-то уйти от объявления
  Const BUFSIZE As Long = 100000

Это не количество строк - а размер буфера - к количеству строк не имеет ни какого отношения - ссылку на эту процедуру я уже скидывал - почитайте внимательно:
Цитата
Given a 7,000,000 line file of 293MB it only takes 0.7 seconds here.
:D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
если заменить строку .... G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls" 


Тогда уже лучше так:
[vba]
Код
       Dim xlWb As Workbook
     MyBook = "G:\РАЗРАБОТКА_2\данно\exim_ua_2015_1-8_рыб.xls"
     Set xlWb = Workbooks.Open(MyBook)
     MF = ActiveSheet.UsedRange.Value
     xlWb.Close False
[/vba]
Только учтите, что в книге .xls у будет не больше 65тыс. строк. - используйте .xlsm или .xlsb
как тогда изменить модуль?

А зачем его менять?
, можно ли как-то уйти от объявления
  Const BUFSIZE As Long = 100000

Это не количество строк - а размер буфера - к количеству строк не имеет ни какого отношения - ссылку на эту процедуру я уже скидывал - почитайте внимательно:
Цитата
Given a 7,000,000 line file of 293MB it only takes 0.7 seconds here.
:D

Автор - SLAVICK
Дата добавления - 21.09.2015 в 09:22
SvetaS Дата: Вторник, 22.09.2015, 14:32 | Сообщение № 26
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK, ОГРОМНОЕ СПАСИБО. hands hands hands :hands::flowers: flowers Можно только спросить - почему в макросе выгружается только в одну накопительную переменную ( при выгрузки в файл ) . А можно -ли как-то сделать чтобы выгружался массив по столбикам (чтобы было быстро). И как тогда это повлияет на быстрый подсчёт строк?
 
Ответить
СообщениеSLAVICK, ОГРОМНОЕ СПАСИБО. hands hands hands :hands::flowers: flowers Можно только спросить - почему в макросе выгружается только в одну накопительную переменную ( при выгрузки в файл ) . А можно -ли как-то сделать чтобы выгружался массив по столбикам (чтобы было быстро). И как тогда это повлияет на быстрый подсчёт строк?

Автор - SvetaS
Дата добавления - 22.09.2015 в 14:32
SLAVICK Дата: Среда, 23.09.2015, 09:20 | Сообщение № 27
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Можно только спросить - почему в макросе выгружается только в одну накопительную переменную ( при выгрузки в файл )

При выгрузке в файл, т.е. при дописывании данных в текст. файл - передается промежуточный массив - а в самой процедуре запись идет построчно, для этого данные из этого промежуточного массива собираются в одну текст. переменную и потом записываются в текст.файл записывать по столбикам в текстовом формате нельзя.
И как тогда это повлияет на быстрый подсчёт строк?

запись в текст. файл никак не связана с просчетом строк.
В принципе от процедуры подсчета строк можно вообще отказаться - для этого достаточно ввести отдельную накопительную переменную. :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Можно только спросить - почему в макросе выгружается только в одну накопительную переменную ( при выгрузки в файл )

При выгрузке в файл, т.е. при дописывании данных в текст. файл - передается промежуточный массив - а в самой процедуре запись идет построчно, для этого данные из этого промежуточного массива собираются в одну текст. переменную и потом записываются в текст.файл записывать по столбикам в текстовом формате нельзя.
И как тогда это повлияет на быстрый подсчёт строк?

запись в текст. файл никак не связана с просчетом строк.
В принципе от процедуры подсчета строк можно вообще отказаться - для этого достаточно ввести отдельную накопительную переменную. :D

Автор - SLAVICK
Дата добавления - 23.09.2015 в 09:20
SvetaS Дата: Среда, 23.09.2015, 14:19 | Сообщение № 28
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK, просто мне подсказали, в виду большого количества строк, во время обработки записывать сразу данные в накопительный массив (как накопительный регистр в 1С).Вот я и думаю как тогда в этом случае эту идею совместить с Вашей. Т.Е. записывать сразу не в текстовую переменную, а после разложения строк ";" , сразу их проверять с помощью нечёткого поиска на наличие слов из справочника и сразу записывать по колонкам в нужный "массив- файл", но так чтобы это было быстро (). Чтобы опять не ставить Redim ... Это было бы идеальным решением....... Простоя я знаю, что если построчно обращаться к каждой строке bp 300 000 excel, записывая туда данные, то он просто зависнет. Как думаете, как это лучше тогда сделать?
 
Ответить
СообщениеSLAVICK, просто мне подсказали, в виду большого количества строк, во время обработки записывать сразу данные в накопительный массив (как накопительный регистр в 1С).Вот я и думаю как тогда в этом случае эту идею совместить с Вашей. Т.Е. записывать сразу не в текстовую переменную, а после разложения строк ";" , сразу их проверять с помощью нечёткого поиска на наличие слов из справочника и сразу записывать по колонкам в нужный "массив- файл", но так чтобы это было быстро (). Чтобы опять не ставить Redim ... Это было бы идеальным решением....... Простоя я знаю, что если построчно обращаться к каждой строке bp 300 000 excel, записывая туда данные, то он просто зависнет. Как думаете, как это лучше тогда сделать?

Автор - SvetaS
Дата добавления - 23.09.2015 в 14:19
SLAVICK Дата: Среда, 23.09.2015, 16:55 | Сообщение № 29
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
во время обработки записывать сразу данные в накопительный массив...
Вот я и думаю как тогда в этом случае эту идею совместить с Вашей

Пишите процедуру проверки по данным массива m и вызывайте ее непосредственно перед вызовом процедуры записи промежуточного массива:
[vba]
Код
txt_write_from_Mas m, n
[/vba]

Тогда в ТХТ файл будут записываться уже просчитанные данные. ;)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 23.09.2015, 16:56
 
Ответить
Сообщение
во время обработки записывать сразу данные в накопительный массив...
Вот я и думаю как тогда в этом случае эту идею совместить с Вашей

Пишите процедуру проверки по данным массива m и вызывайте ее непосредственно перед вызовом процедуры записи промежуточного массива:
[vba]
Код
txt_write_from_Mas m, n
[/vba]

Тогда в ТХТ файл будут записываться уже просчитанные данные. ;)

Автор - SLAVICK
Дата добавления - 23.09.2015 в 16:55
SvetaS Дата: Среда, 23.09.2015, 17:28 | Сообщение № 30
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK, да но как? , тогда, чтобы их вынуть - там нет колонок? какой смыл? - получается каждый раз вынимать - только при помощи Split каждой конкретной строки, а их 300 000 . Я правда не понимаю.....нужен же массив в конечном виде в xls... Я не понимаю, правда..... По времени сплит текста такая же долгая, как и вставка в ячейки массива?
 
Ответить
СообщениеSLAVICK, да но как? , тогда, чтобы их вынуть - там нет колонок? какой смыл? - получается каждый раз вынимать - только при помощи Split каждой конкретной строки, а их 300 000 . Я правда не понимаю.....нужен же массив в конечном виде в xls... Я не понимаю, правда..... По времени сплит текста такая же долгая, как и вставка в ячейки массива?

Автор - SvetaS
Дата добавления - 23.09.2015 в 17:28
SLAVICK Дата: Среда, 23.09.2015, 17:58 | Сообщение № 31
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
SLAVICK, да но как? , тогда, чтобы их вынуть - там нет колонок?

Я же Вам написал
по данным массива m и вызывайте ее непосредственно перед вызовом процедуры записи промежуточного массива:


В массиве m - 34 колонки :D
[vba]
Код
ReDim m(1 To UBound(mt) + 1, 1 To 34)
[/vba]
процедура txt_write_from_Mas записывает этот массив в ТХТ файл. Вам нужно свою процедуру проверки и поиска вставлять до записи этого массива в текст.
См. файл добавил вызов процедуры txtLOOP
[vba]
Код
m = txtLOOP(m) 'Запуск процедуры проверки
[/vba]

Во внутрь этой процедуры и вставьте проверку данных промежуточного массива.
К сообщению приложен файл: 9647310.xlsm (40.5 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 23.09.2015, 18:01
 
Ответить
Сообщение
SLAVICK, да но как? , тогда, чтобы их вынуть - там нет колонок?

Я же Вам написал
по данным массива m и вызывайте ее непосредственно перед вызовом процедуры записи промежуточного массива:


В массиве m - 34 колонки :D
[vba]
Код
ReDim m(1 To UBound(mt) + 1, 1 To 34)
[/vba]
процедура txt_write_from_Mas записывает этот массив в ТХТ файл. Вам нужно свою процедуру проверки и поиска вставлять до записи этого массива в текст.
См. файл добавил вызов процедуры txtLOOP
[vba]
Код
m = txtLOOP(m) 'Запуск процедуры проверки
[/vba]

Во внутрь этой процедуры и вставьте проверку данных промежуточного массива.

Автор - SLAVICK
Дата добавления - 23.09.2015 в 17:58
SvetaS Дата: Четверг, 24.09.2015, 09:19 | Сообщение № 32
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK,
Огромное СПАСИБО. hands hands hands hands
Извините, вопрос был немного в другом.
Массив использовался – как временное хранилище данных
Вопрос был – «Как вместо массива использовать файл без колонок?»
Т.е. если мы кладём в файл всё одной строкой S (где все столбики через & ) – Вы показали как.
То, наверное, нужно уметь и вытащить из файла обратно (мне кажется логичным).
Вытаскивать придётся через Split, так как изначально в файле нет колонок.
Т.Е. Я ПОНИМАЮ, ЧТО , НАВЕРНОЕ, НЕ СРАБОТАЕТ,
[vba]
Код

   Dim mF As Variant
     ADO.DataSource = "G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls"    ' полный путь к книге
     ADO.Query ("SELECT * FROM [exim_ua_2015_1_8_рыб$]")
     mF = ADO.[b]ToArray()[/b]    ' записать результат выполнения запроса в массив
      

[/vba]

Вопрос был второй- «как вытащить корректно данные 300 000 строк (чтобы было быстро)»
 
Ответить
СообщениеSLAVICK,
Огромное СПАСИБО. hands hands hands hands
Извините, вопрос был немного в другом.
Массив использовался – как временное хранилище данных
Вопрос был – «Как вместо массива использовать файл без колонок?»
Т.е. если мы кладём в файл всё одной строкой S (где все столбики через & ) – Вы показали как.
То, наверное, нужно уметь и вытащить из файла обратно (мне кажется логичным).
Вытаскивать придётся через Split, так как изначально в файле нет колонок.
Т.Е. Я ПОНИМАЮ, ЧТО , НАВЕРНОЕ, НЕ СРАБОТАЕТ,
[vba]
Код

   Dim mF As Variant
     ADO.DataSource = "G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls"    ' полный путь к книге
     ADO.Query ("SELECT * FROM [exim_ua_2015_1_8_рыб$]")
     mF = ADO.[b]ToArray()[/b]    ' записать результат выполнения запроса в массив
      

[/vba]

Вопрос был второй- «как вытащить корректно данные 300 000 строк (чтобы было быстро)»

Автор - SvetaS
Дата добавления - 24.09.2015 в 09:19
SvetaS Дата: Четверг, 24.09.2015, 09:26 | Сообщение № 33
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
SLAVICK, МЕНЯ смущает просто что все столбики в итоговом файле хранятся через &, а не по колонкам.....
 
Ответить
СообщениеSLAVICK, МЕНЯ смущает просто что все столбики в итоговом файле хранятся через &, а не по колонкам.....

Автор - SvetaS
Дата добавления - 24.09.2015 в 09:26
SLAVICK Дата: Четверг, 24.09.2015, 10:16 | Сообщение № 34
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вытаскивать придётся через Split, так как изначально в файле нет колонок.

Не обязательно через split.
По сути файл СSV - это итоговая база данных в текстовом формате с разделителем VbTab(символ табуляции) - это символ обозначающий новую колонку.
Такие файлы можно импортировать в другие базы как-то:
SQL
Access ...
Указав что это импорт из текстового файла с разделителем VbTab(символ табуляции).
Т.Е. Я ПОНИМАЮ, ЧТО , НАВЕРНОЕ, НЕ СРАБОТАЕТ,
Dim mF As Variant
    ADO.DataSource = "G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls"    ' полный путь к книге

Правильно понимаете - это процедура импорта из .xls файлов.
У меня в файле импорт в массив - это процедура TXT_ToMas
Я же написал:
Последние два пункта - при большом количестве строк могут быть недоступны - у меня из 100 000 стало 1,2млн, поэтому я бы делал подключение к CSV, поскольку у Вас 2013-й офис - Вам это трудности не составит.

Даже в новом формате excel - всего 1048576 строк - при 300 000 начальных данных может получится - больше 3млн строк - при таком раскладе на лист данные никак не влезут.
Поэтому и нужно внешнее подключение к CSV файлу.
На основании этого подключения можно создать сводные таблицы - и работать с ними.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Вытаскивать придётся через Split, так как изначально в файле нет колонок.

Не обязательно через split.
По сути файл СSV - это итоговая база данных в текстовом формате с разделителем VbTab(символ табуляции) - это символ обозначающий новую колонку.
Такие файлы можно импортировать в другие базы как-то:
SQL
Access ...
Указав что это импорт из текстового файла с разделителем VbTab(символ табуляции).
Т.Е. Я ПОНИМАЮ, ЧТО , НАВЕРНОЕ, НЕ СРАБОТАЕТ,
Dim mF As Variant
    ADO.DataSource = "G:\РАЗРАБОТКА_2\данно" & "\" & "exim_ua_2015_1-8_рыб.xls"    ' полный путь к книге

Правильно понимаете - это процедура импорта из .xls файлов.
У меня в файле импорт в массив - это процедура TXT_ToMas
Я же написал:
Последние два пункта - при большом количестве строк могут быть недоступны - у меня из 100 000 стало 1,2млн, поэтому я бы делал подключение к CSV, поскольку у Вас 2013-й офис - Вам это трудности не составит.

Даже в новом формате excel - всего 1048576 строк - при 300 000 начальных данных может получится - больше 3млн строк - при таком раскладе на лист данные никак не влезут.
Поэтому и нужно внешнее подключение к CSV файлу.
На основании этого подключения можно создать сводные таблицы - и работать с ними.

Автор - SLAVICK
Дата добавления - 24.09.2015 в 10:16
Hugo Дата: Воскресенье, 27.09.2015, 19:47 | Сообщение № 35
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
По сути файл СSV - это итоговая база данных в текстовом формате с разделителем VbTab(символ табуляции)

да ладно... Впервые слышу, ни разу не встречал CSV с разделителем VbTab.
https://ru.wikipedia.org/wiki/CSV


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение
По сути файл СSV - это итоговая база данных в текстовом формате с разделителем VbTab(символ табуляции)

да ладно... Впервые слышу, ни разу не встречал CSV с разделителем VbTab.
https://ru.wikipedia.org/wiki/CSV

Автор - Hugo
Дата добавления - 27.09.2015 в 19:47
SLAVICK Дата: Воскресенье, 27.09.2015, 20:30 | Сообщение № 36
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
да ладно... Впервые слышу, ни разу не встречал CSV с разделителем VbTab.

Ну тогда файл, который создается благодаря моему макросу из 31-го поста будет для Вас открытием :D
А если серьезно, то даже в приведенной Вами статье есть:
Цитата
Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя

и еще:
Цитата
на сегодняшний день под CSV, как правило, понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк.

CSV - это текстовый файл, какой разделитель поставим такой и будет. Я поставил для этой задачи VbTab , а моя цитата которую Вы указали - это не общее описание формата файла, а конкретно моего файла - для решения задачи ТС. ^_^ я так объяснял что к чему в моем коде yes


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Воскресенье, 27.09.2015, 20:31
 
Ответить
Сообщение
да ладно... Впервые слышу, ни разу не встречал CSV с разделителем VbTab.

Ну тогда файл, который создается благодаря моему макросу из 31-го поста будет для Вас открытием :D
А если серьезно, то даже в приведенной Вами статье есть:
Цитата
Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя

и еще:
Цитата
на сегодняшний день под CSV, как правило, понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк.

CSV - это текстовый файл, какой разделитель поставим такой и будет. Я поставил для этой задачи VbTab , а моя цитата которую Вы указали - это не общее описание формата файла, а конкретно моего файла - для решения задачи ТС. ^_^ я так объяснял что к чему в моем коде yes

Автор - SLAVICK
Дата добавления - 27.09.2015 в 20:30
Hugo Дата: Воскресенье, 27.09.2015, 20:58 | Сообщение № 37
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну как частный случай может быть и VbTab, но не безкомпромиссно "файл СSV - это итоговая база данных в текстовом формате с разделителем VbTab".
Я помнится и сам давно в одной своей личной задаче генерил текстовые файлы с разделителем VbTab и расширением xls - вообще 2003 эксель открывал такие файлы как родные без вопросов.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу как частный случай может быть и VbTab, но не безкомпромиссно "файл СSV - это итоговая база данных в текстовом формате с разделителем VbTab".
Я помнится и сам давно в одной своей личной задаче генерил текстовые файлы с разделителем VbTab и расширением xls - вообще 2003 эксель открывал такие файлы как родные без вопросов.

Автор - Hugo
Дата добавления - 27.09.2015 в 20:58
SLAVICK Дата: Понедельник, 28.09.2015, 09:12 | Сообщение № 38
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Ну как частный случай может быть и VbTab, но не безкомпромиссно

Так я же написал:
а моя цитата которую Вы указали - это не общее описание формата файла, а конкретно моего файла - для решения задачи ТС.

Т.е. описание конкретно под решаемую задачу, а не формата в целом.
Разделитель может быть любым, но конкретно для этой задачи запятая и точка с запятой - не подходят - много разного текста - поэтому я выбрал VbTab booze


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Ну как частный случай может быть и VbTab, но не безкомпромиссно

Так я же написал:
а моя цитата которую Вы указали - это не общее описание формата файла, а конкретно моего файла - для решения задачи ТС.

Т.е. описание конкретно под решаемую задачу, а не формата в целом.
Разделитель может быть любым, но конкретно для этой задачи запятая и точка с запятой - не подходят - много разного текста - поэтому я выбрал VbTab booze

Автор - SLAVICK
Дата добавления - 28.09.2015 в 09:12
SvetaS Дата: Пятница, 02.10.2015, 09:01 | Сообщение № 39
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: -10 ±
Замечаний: 80% ±

Excel 2013
yes


Сообщение отредактировал SvetaS - Суббота, 03.10.2015, 08:43
 
Ответить
Сообщениеyes

Автор - SvetaS
Дата добавления - 02.10.2015 в 09:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Загрузить данные в массив 300 000 строк (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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