Возможности !SEMTools

Объединить несколько CSV файлов в один

Объединить CSV в единый CSV

В Excel несложно открывать небольшие CSV-файлы, но часто возникают ситуации, когда однотипных файлов очень много, и нужно их объединить в один файл.

Глобально есть множество способов объединить CSV-файлы в один, но с помощью Excel их не так много.

Рассмотрим основные.

Объединить данные из CSV с Power Query

Фактически это не способ объединения файлов. Это способ объединения данных в них. Т.к. итоговый файл уже не CSV, а Excel-таблица с динамическим запросом. Тем не менее, данные действительно объединяются в один файл, что зачастую является конечной задачей (но не всегда).

  1. Соберите все CSV в одну папку. По возможности одинаковая структура столбцов и кодировка (UTF-8).
  2. В Excel откройте пустую книгу → Данные → Получить данные → Из файла → Из папки.
  3. Выберите папку с CSV → Преобразовать данные.
  4. В окне Power Query нажмите Объединить файлы (Combine) → выберите Пример файла (Sample file), отметьте Разделитель (запятая/точка с запятой) и Строка заголовков.
  5. Power Query создаст запросы: Transform Sample File, Example File и основной запрос с объединением. Проверьте типы данных столбцов, при необходимости измените.
  6. Нажмите Главная → Закрыть и загрузить (Close & Load) → выберите место выгрузки (лист/модель).

Добавляйте новые CSV в ту же папку и нажимайте Данные → Обновить все. Никаких ручных операций больше не нужно.

VBA-макрос (склеить все CSV из папки в один файл)

Эта процедура действительно даёт возможность объединить несколько CSV файлов в один. При запуске диалоговое окно попросит вас указать папку с файлами. Алгоритм крайне простой – объединяются все файлы с расширением CSV в папке. Название итогового файла – “!Объединённый_CSV”.

Вот готовый для копирования и вставки код (жмите на кнопку “Копировать”):

Sub Объединить_CSV()
    Dim fp As String, fn As String, df As String
    Dim ds As Long, ss As Long
    Dim ln As String, fd As FileDialog
    Dim fl As String, fc As Long
    
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    Select Case fd.Show
        Case -1: fp = fd.SelectedItems(1) & "\"
        Case Else: Exit Sub
    End Select
    
    df = fp & "!Объединённый_CSV.csv"
    ds = FreeFile
    Open df For Output As #ds
    
    fn = Dir(fp & "*.csv")
    fl = ""
    fc = 0
    
    Do While fn <> ""
        If fn <> "!Объединённый_CSV.csv" Then
            ss = FreeFile
            Open fp & fn For Input As #ss
            Do While Not EOF(ss)
                Line Input #ss, ln
                Print #ds, ln
            Loop
            
            Close #ss
            fl = fl & fn & vbCrLf
            fc = fc + 1
        End If
        fn = Dir
    Loop
    
    Close #ds
    MsgBox "Файлов объединено: " & fc & vbCrLf & fl, vbInformation
End Sub

Создайте в книге модуль, вставьте в него код и выполните. Если хотите сохранить код на будущее, придется сохранить файл в формате xlsm или xlsb. Можно также сохранить его в личную книгу макросов, это более удобный вариант.

Полагаю, несложно будет модифицировать код, чтобы объединить TSV или TXT файлы похожим макросом.

Объединить CSV в 2 клика с !SEMTools

Для тех, кто ценит время, будет полезно установить надстройку !SEMTools, ведь объединение CSV в ней уже много лет доступно бесплатно! Инструмент находится на панели !SEMTools в группе процедур “Разбить/Сцепить” (следующая после “Извлечь“).

Доступна во всех версиях надстройки – Lite и Pro. Покупать продукт не нужно. Вот так работает:

Объединяем несколько CSV в один CSV файл.

В надстройке немало и других бесплатных инструментов. Но если вам часто приходится работать с текстовыми данными, рекомендую ознакомиться со всеми её возможностями на этом сайте.

Нужно регулярно объединять десятки CSV и обрабатывать текстовые данные? Установите надстройку !SEMTools и избавьтесь от рутины. Поиск, удаление, изменение и удаление данных – пара кликов!