Функция TextFile2Array предназначена для преобразования файла CSV в двумерный массивОчень часто при работе с текстовыми файлами (и, в частности, с файлами CSV) приходится их загружать на лист Excel, предварительно производя фильтрацию данных в этом файле. Чтобы упростить весь процесс - от выбора файла CSV в диалоговом окне, до разбиения загруженного из файла текста в двумерный массив, и была написана эта функция. В качестве параметров функции можно задать разделители строк и столбцов текстового файла, так что при помощи этой функции можно загружать данные не только из файлов CSV, но и из любых других текстовых файлов, имеющих аналогичную структуру. Пример использования функции для загрузки данных из файла CSV: Sub ЗагрузкаДанныхИзCSV() ' выбор файла по умолчанию предлагается в той же папке, ' где расположен текущий файл Excel CSVarr = TextFile2Array(, ThisWorkbook.Path, , "*.csv") ' проверка результата загрузки данных (выход из макроса, если данные не загружены) If Not IsArray(CSVarr) Then MsgBox "Файл CSV не обработан", vbCritical, "Ошибка": Exit Sub ' ваш код обработки двумерного массива Debug.Print "Загружен двумерный массив размерами " & _ UBound(CSVarr, 1) & " строк на " & UBound(CSVarr, 2) & " столбцов" End Sub Результат в окне Immediate:
Код функции TextFile2Array: Function TextFile2Array(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "Текстовые файлы", _ Optional ByVal FilterExtention As String = "*.*", _ Optional ByVal ColumnsSeparator$ = ";", _ Optional ByVal RowsSeparator$ = vbNewLine) As Variant ' Функция запрашивает имя файла (текстового, CSV, и т.п.), и обрабатывает его содержимое ' В качестве параметров можно задать разделители строк и столбцов для разбиваемой строки ' Возвращает двумерный массив - результат преобразования текстового файла в двумерный массив On Error Resume Next With Application.FileDialog(msoFileDialogOpen) ' диалоговое окно выбора файла CSV .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function Filename$ = .SelectedItems(1) End With Set fso = CreateObject("scripting.filesystemobject") ' читаем текст из выбранного файла Set ts = fso.OpenTextFile(Filename$, 1, True): txt$ = ts.ReadAll: ts.Close Set ts = Nothing: Set fso = Nothing txt = Trim(txt): Err.Clear ' разделяем текст на строки и столбцы If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$)) tmpArr1 = Split(txt, RowsSeparator$): RowsCount = UBound(tmpArr1) + 1 ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1 If Err.Number > 0 Then MsgBox "Строка не может быть разбита на двумерный массив", vbCritical: End ReDim arr(1 To RowsCount, 1 To ColumnsCount) For i = LBound(tmpArr1) To UBound(tmpArr1) tmpArr2 = Split(Trim(tmpArr1(i)), ColumnsSeparator$) For j = 1 To ColumnsCount arr(i + 1, j) = tmpArr2(j - 1) Next j Next i TextFile2Array = arr ' возвращаем результат в виде двумерного массива End Function
|
|||

Комментарии
Отправить комментарий