Как разбить огромный csv файл - VBA

Узнай цену своей работы

Формулировка задачи:

Добрый день, помогите решить задачу: есть ексель файл на 5000 строк и есть огромный csv файл на 1,16 Гбайт, нужно найти совпадающие значения в этих файлах пробовал через функцию ВПР находится все до 1000000 строк, а больше ексель не показывает так как стоит ограничение в этом пределе, а сам csv файл предположительно на 50000000 строк я хочу его разбить на 50 меньших файлов и по отдельности произвести поиск совпадающих строк, как это можно сделать? Или подскажите пожалуйста другой способ найти совпадающие строки с моим маленьким файлом и этим огромнейшим csv файлом

Решение задачи: «Как разбить огромный csv файл»

textual
Листинг программы
Sub qwert()
Dim sl: Set sl = CreateObject("scripting.dictionary") '
Dim r, ri, lr, m(), t
 
'''*********************просто заполнение уникальными значениями.
'Randomize
'For r = 1 To 5000
'    Do
'        t = Int(1000001 * Rnd)
'    Loop While sl.exists(t)
'    sl(t) = r
'Next r
' ActiveSheet.[a1].Resize(sl.Count) = Application.Transpose(sl.keys)
''***************************************
 
With ActiveSheet
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    m = .[a1].Resize(lr, 2).Value
    For r = 1 To 5000
        sl(m(r, 1)) = r 'запоминаем значение и номер строки в словарь
    Next r
 
'словарь заполнен уникальными. дальше работа с файлом.
'Проверять не на чём. моделировать лениво. Примерно так:
 
 Open "c:\temp\myfile1.csv" For Input As #1 'огромный файл
  
'цикл выполняется, пока конец файла не достигнут
        Do Until EOF(1)
           'при каждом вызове оператора Line Input он записывает в
           'переменную новою строку
          Line Input #1, t
        '  тут с переменной t возможно надо что-то сделать
            t = t
        '    и потом проверить наличие в словаре
            If sl.exists(t) Then ' если в словаре есть
        '    например можно поставить метку в массив
                ri = sl(t) '
                m(ri, 2) = "есть такое" '
            End If
        Loop
    Close
     .[a1].Resize(lr, 2) = m ' массив с результатом вывалить на лист
End With
 
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5