Страницы: 1
RSS
Сбор данных из txt файлов VBA, Добавить данные в столбцы из txt файлов в excel VBA
 
Добрый день.

Помогите решить задачку, на просторах интернета не смог найти нужный вариант.

Нужно собрать данные из нескольких txt файлов следующим образом.

к примеру в папке 2 txt файла в каждом по 5 строк.
Нужно каждую строку из одного txt файла поместить в разные столбцы, следующий файл сделать тоже самое но с новой строки.

В результате должен получиться excel файл с заполненными 5 столбцами и двумя строками строчками.

Строк в файлах может быть разное количество, файлов в папке может быть разное количество.

Пример прилагаю
 
Доброго времени, вариант:
Вредить легко, помогать трудно.
 
Цитата
написал:
Доброго времени, вариант:
Попробовал с 6 txt файлами. Не работает =(
 
В Power Query (все файлы поместить в папку "Data", которая должны быть рядом с файлом Excel; либо ручками указать путь до папки с файлами; обновление по кнопке Обновить все на вкладке Данные):
Код
let
  path = Table.FirstValue ( Excel.CurrentWorkbook(){[ Name = "path" ]}[Content] ),
  files = Folder.Files ( path ),
  filter = Table.SelectRows ( files, each [Extension] = ".txt" ),
  getData = Table.TransformColumns (
    filter,
    { { "Content", ( x ) => [ impCSV = Csv.Document ( x, [ Encoding = 1251 ] ), transpose = Table.Transpose ( impCSV ) ][transpose], type table } }
  ),
  combine = Table.Combine ( getData[Content] )
in
  combine
 
lilo295,  какую ошибку выдаёт?
Подключите нужную библиотеку : Tools->References->Microsoft Scripting Runtime
Вредить легко, помогать трудно.
 
lilo295, добрый вечер! Вариант:
Код
Sub get_data()
Dim FSO As FileDialog
Dim i, file, r, lr, j, lines
Set FSO = Application.FileDialog(msoFileDialogFolderPicker)
With FSO
    .AllowMultiSelect = False
    .Show
End With
With ActiveSheet
   file = Dir(FSO.SelectedItems(1) & "\*.txt"): lr = 0
    While Len(file) > 0
        r = 0
        Open FSO.SelectedItems(1) & "\" & file For Input As #1
        lines = regex(Input$(LOF(1), #1))
            For Each j In lines
                .Cells(lr + 1, 1).Offset(0, r) = j: r = r + 1
            Next
        file = Dir: lr = lr + 1: Close #1
    Wend
End With
End Sub
Private Function regex(item) As Variant
Dim matches As Object, match, arr(), j
With CreateObject("VBScript.Regexp")
    .ignorecase = True: .Global = True: .MultiLine = True: .Pattern = "^.+$"
    If .test(item) Then
        j = 1
        Set matches = .Execute(item)
        For Each match In matches
            ReDim Preserve arr(1 To j)
            arr(j) = match: j = j + 1
        Next match
    End If
End With
regex = arr
End Function
 
Спасибо большое! Последние 2 варианта рабочие!
Буду пробовать на практике теперь.
Страницы: 1
Наверх