{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

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

Иногда встречаются задачи, для решения которых необходимо использовать исходные данные, выгруженные из автоматизированных систем организации, в текстовом формате с разделителями для дальнейшей обработки в Excel. Трудности возникают, если исходные данные содержат более 500 тыс. строк, так как не каждый офисный компьютер может с легкостью обрабатывать такой объем записей в Excel. А если для решения определенной задачи необходимо всего лишь 5-10% информации из исходного текстового файла?

Большинство пользователей Excel умеют загружать данные из текстовых файлов с помощью встроенного мастера загрузки, но это только один из этапов решения задачи. Дальше необходимо отфильтровать нужные записи и вот здесь и начинаются трудности: Excel «зависает», не может справиться с большим объемом данных. Бывалые IT-спецы посоветуют использовать SQL и другие средства работы с базами данных, но… .есть другой несложный метод.

Итак, необходимо решить следующую задачу:

Исходный текстовый файл с разделителями «|» содержит данные обо всех операциях клиентов банка: в офисах банка, в банкоматах, в он-лайн сервисах, в магазинах и проч.

Необходимо выбрать операции, совершенные только в одном офисе компании. Данные операции в текстовом файле отмечены признаком «Офис компании» построчно.

Решение:

  • Создаем новый файл Excel, в нем создаем лист «Результат», сюда будут записываться строки из файла, удовлетворяющие нашему критерию.
  • Не забываем сохранить файл с поддержкой макросов.
  • Открываем редактор VBA (Alt+F11).
  • Создаем процедуру.
Sub ЗагрузкаТекста() Dim Stroka, Razdel, a() As String 'объявляем некоторые переменные Filename$ = GetFilePath() 'текстовый файл выбираем в стандартном окне Windows If Filename$ = "" Then Exit Sub 'очистка таблицы перед загрузкой last_row = Worksheets("Результат").UsedRange.Rows.Count Worksheets("результат").Activate Worksheets("результат").Rows("1:" & last_row).Delete Shift:=xlUp Razdel = "|" 'задаем формат разделителя полей в текстовом файле k = 1 'счетчик записей в результирующей таблице Open Filename$ For Input As #1 ' открываем файл для чтения строк Do While Not EOF(1) 'цикл по строкам файла Input #1, Stroka 'считывание текущей строки If InStr(Stroka, "|Офис компании|") > 0 Then 'проверяем строку на предмет вхождения подстроки "Офис компании" 'разделяем строку на поля и записываем в ячейки на листе "Результат" a = Split(Stroka, Razdel) k = k + 1 For i = 1 To UBound(a) Worksheets("Результат").Cells(k, i) = Trim(a(i)) Next i End If Loop Close #1 'закрываем текстовый файл MsgBox ("ГОТОВО!") End Sub

Ниже приведен код функции выбора файла GetFilePath

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "файлы txt", _ Optional ByVal FilterExtention As String = "*.txt") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1) folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function
0
Комментарии
-3 комментариев
Раскрывать всегда