Макрос разбить файл excel

Если файл сохранён на диске, можно так:
1. Открываете книгу с данными на нужном листе
2. Заходите в VBA (Alt+F11)
3. Выбираете в меню Insert -> Module
4. Вставляете нижеприведённый код
5. Нажимаете F5 (не сохраняете исходный файл)

Option Explicit ' Обязательное объявление переменных
Option Base 1 ' Нижняя граница массива (по умолчанию)
'123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789

Sub Border_Limit()
  Dim Limit As Integer, Count As Integer, SaveDir As String, SetTitle As Boolean
  
  Count = 1: Limit = 1000 ' Счётчик файлов; Количество строк
  SetTitle = False ' Если есть заголовок, заменить False на True
  
  SaveDir = ThisWorkbook.Path ' Или вписать полный путь для сохранения "C:"
  ' Предполагается, что в колонке A нет пустых ячеек
  While Not IsEmpty(Cells(IIf(SetTitle, 2, 1), 1))
    Rows("1:" & Limit).Copy
    Workbooks.Add xlWBATWorksheet ' Создать новую книгу: шаблон с 1 листом
    ActiveSheet.Paste: Cells(1, 1).Select
    ActiveWorkbook.SaveAs Filename:=SaveDir & "Массив_" & Count & ".xlsx", _
      FileFormat:=xlOpenXMLWorkbook
    ActiveWindow.Close
    Rows(IIf(SetTitle, 2, 1) & ":" & Limit).Delete Shift:=xlUp
    Count = Count + 1
  Wend: MsgBox "Файл разбит на " & Count - 1 & " файл(ов). "
End Sub

Никакие C++ запускать не надо.

Для пытливых умов: Отказ от Слияния в пользу шаблонов https://toster.ru/q/320942

Сохранение листов книги как отдельных файлов

Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно «разобрать», т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.

save-sheets-as-files.png

Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.

Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.

Способ 1. Простое разделение

Нажмите сочетание Alt+F11 или выберите в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:

Sub SplitSheets1()
    Dim s As Worksheet
    For Each s In ActiveWorkbook.Worksheets    'проходим по всем листам в активной книге
        s.Copy       'копируем каждый лист в новый файл
    Next
End Sub

Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.

Способ 2. Разделение с сохранением

При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:

Sub SplitSheets2()
    Dim s As Worksheet
    Dim wb as Workbook
    Set wb = ActiveWorkbook
    For Each s In wb.Worksheets                                 'проходим во всем листам активной книги
        s.Copy                                                  'сохраняем лист как новый файл
        ActiveWorkbook.SaveAs wb.Path & "" & s.Name & ".xlsx"  'сохраняем файл
    Next
End Sub

Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например «D:Отчеты2012» и т.п.

Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла — параметр FileFormat:

ActiveWorkbook.SaveAs wb.Path & "" & s.Name & ".xlsb", FileFormat:=50  

Для основных типов файлов значения параметра FileFormat следующие:

  • XLSX = 51
  • XLSM = 52
  • XLSB = 50
  • XLS = 56
  • TXT = 42

Полный список всех вариантов можно посмотреть в справке MSDN.

Способ 3. Сохранение в новые книги только выделенных листов

Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:

Sub SplitSheets3()
    Dim AW As Window
    Set AW = ActiveWindow
    For Each s In AW.SelectedSheets
        Set TempWindow = AW.NewWindow    'создаем отдельное временное окно
        s.Copy                           'копируем туда лист из выделенного диапазона
        TempWindow.Close                 'закрываем временное окно
    Next
End Sub

Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.

Способ 4. Сохранение только выделенных листов в новый файл

Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:

Sub SplitSheets4()
    Dim CurW As Window
    Dim TempW As Window
    Set CurW = ActiveWindow
    Set TempW = ActiveWorkbook.NewWindow
    CurW.SelectedSheets.Copy
    TempW.Close
End Sub

Способ 5. Сохранение листов как отдельных PDF-файлов

Этот способ чем-то похож на второй, но листы сохраняются не как отдельные книги Excel, а в формате PDF, что часто требуется, если никто не должен менять документ и увидеть ваши формулы. Обратите внимание, что:

  • для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
  • листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
  • книга должна быть сохранена на момент экспорта

Нужный нам код будет выглядеть следующим образом:

Sub SplitSheets5()
    Dim s As Worksheet

    For Each s In ActiveWorkbook.Worksheets
        s.ExportAsFixedFormat Filename:=ThisWorkbook.Path & "" & s.Name & ".pdf", Type:=xlTypePDF
    Next
End Sub

Способ 6. Готовый макрос из надстройки PLEX

Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:

Ссылки по теме

  • Сборка листов из нескольких книг в одну
  • Что такое макросы, куда вставлять код на Visual Basic, как их использовать.

Введение

Предположим, у нас есть рабочий лист с большим количеством данных, и нам нужно разделить данные на отдельные книги Excel на основе столбца «Категория». Решить данную проблему возможно ручным способом, применяя инструмент фильтрации данных. Однако повторное копирование данных потребует терпения.

Как быстро разделить таблицу Excel на отдельные книги макросом. Пошаговый алгоритм

  • Сочетанием клавиш Alt+F11 открываем окно Visual Basic
  • Создаем новый модуль Insert -> Module
  • Вставляем код
Sub Разделить_столбец_по_книгам()
Const column = 2 'номер столбца, по которому будет происходить разделение.'
Const head = True
Set wbAct = ActiveWorkbook

Set dic = CreateObject("Scripting.Dictionary")

lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).column

arr = Range("A1", Cells(lr, lc)).Value

If head Then fr = 2 Else fr = 1

For i = fr To UBound(arr)
    If Trim(arr(i, column)) <> "" Then dic.Item(arr(i, column)) = dic.Item(arr(i, column)) & "|" & i
Next

iPath = wbAct.Path & Application.PathSeparator & "Result" & Application.PathSeparator
'Result - название папки с результатами'
If Dir(iPath, vbDirectory) = "" Then MkDir iPath

arrDic = dic.keys
Set Rng = Nothing
Application.DisplayAlerts = False
For i = 0 To UBound(arrDic)
rrs = Split(Mid(dic.Item(arrDic(i)), 2), "|")
    If head Then Set Rng = Rows(1)
    For Each rr In rrs
        If Not Rng Is Nothing Then Set Rng = Union(Rows(rr), Rng) Else Set Rng = Rows(rr)
    Next
    Set wb = Workbooks.Add(1)
    Set sh = wb.Sheets(1)
    Rng.Copy
    sh.[A1].PasteSpecial xlPasteColumnWidths
    sh.[A1].PasteSpecial xlPasteAll
    Set Rng = Nothing
    wb.SaveAs iPath & Replace_symbols(arrDic(i)) & ".xlsx", xlOpenXMLWorkbook
    wb.Close False
Next
Application.DisplayAlerts = True
End Sub
'Замена запрещённых символов в имени файла или папки'
Function Replace_symbols(ByVal txt As String) As String
    St$ = "\/~!@#$%^&*=|`'"""
    For i% = 1 To Len(St$)
        txt = Replace(txt, Mid(St$, i, 1), "_")
    Next
    Replace_symbols = txt
End Function
  • На второй строке кода, цифру 2 замените на номер столбца, в котором содержится критерий для разбиения
  • Сохраните код Ctrl+S
  • Сохраните файл Excel, как книгу с поддержкой макросов xlsm
  • Выполните макрос Alt+F8

Папка с новыми файлами будет лежать по тому же пути, что и файл, в котором вы запускали макрос

Заключение

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

У нас Вы можете заказать выполнение задач по MS Excel и Google таблицам

А также, пройти бесплатные онлайн курсы по MS Excel с заданиями

Добрый день!

Такая проблема: нужно срочно разделить огромный массив данных и сгруппировать его в новых файлах по фильтру. В ручную это делать очень долго и невыносимо.
Суть:
В рабочем файле десяток столбцов и полторы тысячи строк. Нужен макрос, который отсортирует по двум параметрам и сохранит результат отдельным файлам с названием из ячеек(сперва дата, затем договор).

А именно:
Фильтр по ячейке Дата 2 (J) и Договор (I).
Диапазон сохранения данных в новый файл со столбца A, по столбец I(включительно).
Как должен выглядеть финальный результат: создаются файлы с названием(к примеру) «08.06.2020 55.34-ПП (1).xlsx», «08.06.2020 55.34-ПП (2).xlsx», «09.06.2020 55.34-ПП (2).xlsx» и так далее, в которых содержится информация из диапазона A:I. В файле с названием «08.06.2020 55.34-ПП (1).xlsx» должны содержатся все строки где Дата 2 (J) и Договор (I) соответствуют тому, что в названии.

Важный момент: нельзя сохранить файл со слешем в названии из Договора (I), поэтому его необходимо заменять на точку.

Содержание

  1. Разбиение текстового файла (в т.ч. CSV) на несколько файлов с заданным количеством строк
  2. Комментарии
  3. Как разделить .xlsx по строкам?
  4. Vba excel разбить файл
  5. Vba excel разбить файл
  6. Как разделить файл Excel на отдельные файлы (по листам)
  7. Делим файл Excel на несколько файлов по листам
  8. Делим файл Excel на несколько PDF файлов по листам
  9. Разделите только те рабочие листы, в которых содержится слово/фраза, на отдельные файлы Excel

Разбиение текстового файла (в т.ч. CSV) на несколько файлов с заданным количеством строк

Функция предназначена для разбивки текстового файла на несколько файлов меньшего размера — в каждом из которых будет не более заданнного количества строк

Разделитель строк (обычно это перевод строки — константа vbNewLine) задаётся в качестве параметра функции Delimiter$

Создаваемые файлы получают имена вида filename(1).txt, filename(2).txt и т.д.

Если задан параметр функции DeleteSourceFile равным TRUE, — то исходный файл удаляется после разделения

Функция возвращает коллекцию, содержащую пути к сформированным файлам

В начало каждого создаваемого файла дописывается строка заголовка — первая строка из исходного файла

Пример использования функции SplitTextFile:

Результат работы примера (из окна Immediate редактора VBA)

Создан файл: C:test2011 04 17 12-32-30(1).csv
Создан файл: C:test2011 04 17 12-32-30(2).csv
Создан файл: C:test2011 04 17 12-32-30(3).csv

Код функции SplitTextFile:

Комментарии

Не удержался напишу) На ваш комментарий Дмитрию на счет больших файлов — больше всего понравилась софтина ASAP Utilities, функционал очень богатый, а для разбиения на файлы по строкам Sheets » Split the selected range into multiple worksheets..к вам забрел с тем же вопросом, пока в данной надстройке не нашел

Дмитрий, данный макрос не рассчитан на файлы размером 117мб
(он для маленьких файлов — до 1-10 Мб)
Для огромных файлов (как ваш) — совсем другие технологии обработки надо применять (построчное чтение),
чтобы быстрее всё работало, и памяти хватало на обработку.
Не пытайтесь найти такое у меня на сайте, — мои «универсальные» макросы не рассчитаны на файлы такого объема

Да, и если читать файл не ReadAll, а ReadLine, то строки корректно читаются при отладке. Но так как строк много, то в режиме отладки весь файл нет желания гонять, а как только работа начинается в обычном режиме, эксель виснет. Может это из-за большого числа строк?

Спасибо за ответ! Но не помогло. В окне отладчика вижу, что в txt появились символы ? вместо текста, а на строке txt = Split(txt, Delimiter$, 2)(1) вылетает ошибка subscript out of range. Насколько я понял — не видит разделителя и не может разбить строку на подстроки.

у вас файл в другой кодировке (unicode) — дополнительный параметр TRUE как раз для этого предназначен

Здравствуйте! Ваш код использую для обработки файлов. Но при обработке очередного файла в строке Set ts = fso.OpenTextFile(filename, 1, True): txt = ts.ReadAll: ts.Close не читается исходный файл. В txt передается «». Исходный файл csv. Подобных файлов (и по структуре и типу данных) обработано с десяток, было все отлично, а тут проблема. Не могу понять в чем причина. Может подскажете? Единственное отличие этот злополучный файл больше других — 117мб

Спасибо, попробую. Извините, что вопрос не по теме — не разобрался по порядку общения. Я тут в первый раз.

Марат, а какое отношение ваш вопрос имеет к теме статьи?
Задайте вопрос на форуме по Excel, — там подскажут.
Я бы использовал GetObject для получения доступа к файлу, если известен путь, по которому файл сохранён.

Здравствуйте Игорь, проблема такая — открыты два экселевских файла, но оба в своих родительских окнах, необходимо из одного файла перекинуть информацию в другой. Макрос, прикрепленный к одному из файлов, не видит книгу в другом родительском окне. Как его все-таки увидеть?

Галия, в данном случае в коде очень много чего менять надо.
Проще написать макрос «с нуля».

Оформляйте заказ на сайте (если готовы оплатить помощь),
или обратитесь на форумы по Excel (если хотите, чтобы вам помогли бесплатно)

Спасибо, очень помогли!
Подскажите, пожалуйста, еще немножко
Есть экселевский файл, в нем несколько столбцов. Необходимо, например, если значение в столбце А больше 0, записывать в первый файл, если больше 5, в следующий, т.е. кол-во строк в файлах мы сами не задаем, а определяем из условия. Как это реализовать? Как я понимаю, нужно поменять в этом месте
If rc>= MaxRowsCount& .
На что-то в этом роде
If Cells(i, «A») >0 «0» Then ..
дальше вот как с файлами работать не знай

Получатся текстовые файлы с расширением xls — Excel их поймёт.
чтобы XLSX получить, — это код заметно переделывать надо.

Здравствуйте! Скажите, пожалуйста, можно ли как-нибудь изменить макрос, чтоб новые файлы были с расширением .xlsx?

Источник

Как разделить .xlsx по строкам?

Если файл сохранён на диске, можно так:
1. Открываете книгу с данными на нужном листе
2. Заходите в VBA (Alt+F11)
3. Выбираете в меню Insert -> Module
4. Вставляете нижеприведённый код
5. Нажимаете F5 (не сохраняете исходный файл)

Никакие C++ запускать не надо.

Для пытливых умов: Отказ от Слияния в пользу шаблонов https://toster.ru/q/320942

kolyayolo, благодарю за замечание (обновил код), и хороший вопрос.
Для переноса ширины колонок нужно после объявления переменных сохранить значения ширины колонок в массив:

Затем, после вставки данных перенести значения ширины колонок из массива:

Спасибо за решение, искал везде, ваш подошел идеально! Единственный вопрос — а как сделать, чтобы полученные таблицы-файлы были «упакованы» в умные таблицы на выходе? Я не силен в VBA, подскажете какой код и куда его вписать?

Добавил код, который добавляет умную таблицу к диапазону, но есть проблема. У меня файлы формируются из заранее подготовленной умной таблицы, т.е. она разбивается на части. И этот (ваш) код получается формирует файлы с не отформатированными диапазонами, а последний файл именно форматируется в умную таблицу (как бы унаследует формат из исходного файла). Т.е. не все сформированные файлы с умными таблицами получаются, а только последний. А мне нужно, чтобы все были оформлены в умные таблицы. Я добавил код, который добавляет формат в полученные файлы, вот такое у меня получилось:

Но в результате получается ошибка, т.к. система пытается последнюю таблицу, которая «умная» тоже повторно оформить.
Подскажете, как подправить?

kolyayolo, alcompstudio, на технических ресурсах принято выражать свою положительную оценку кнопкой «Нравится«, тем самым указывая на полезность материала.

Для создания умной таблицы для всего активного листа с именем «Table_1» используется следующий метод (четвёртый параметр указывает на наличие заголовков):

Источник

Vba excel разбить файл

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создать макрос который разделит файл группируя по значениям (Макросы/Sub)

Создать макрос который разделит файл группируя по значениям

exPower Дата: Четверг, 08.10.2020, 13:02 | Сообщение № 1

Такая проблема: нужно срочно разделить огромный массив данных и сгруппировать его в новых файлах по фильтру. В ручную это делать очень долго и невыносимо.
Суть:
В рабочем файле десяток столбцов и полторы тысячи строк. Нужен макрос, который отсортирует по двум параметрам и сохранит результат отдельным файлам с названием из ячеек(сперва дата, затем договор).

А именно:
Фильтр по ячейке Дата 2 (J) и Договор (I).
Диапазон сохранения данных в новый файл со столбца A, по столбец I(включительно).
Как должен выглядеть финальный результат: создаются файлы с названием(к примеру) «08.06.2020 55.34-ПП (1).xlsx», «08.06.2020 55.34-ПП (2).xlsx», «09.06.2020 55.34-ПП (2).xlsx» и так далее, в которых содержится информация из диапазона A:I. В файле с названием «08.06.2020 55.34-ПП (1).xlsx» должны содержатся все строки где Дата 2 (J) и Договор (I) соответствуют тому, что в названии.

Важный момент: нельзя сохранить файл со слешем в названии из Договора (I), поэтому его необходимо заменять на точку.

Такая проблема: нужно срочно разделить огромный массив данных и сгруппировать его в новых файлах по фильтру. В ручную это делать очень долго и невыносимо.
Суть:
В рабочем файле десяток столбцов и полторы тысячи строк. Нужен макрос, который отсортирует по двум параметрам и сохранит результат отдельным файлам с названием из ячеек(сперва дата, затем договор).

А именно:
Фильтр по ячейке Дата 2 (J) и Договор (I).
Диапазон сохранения данных в новый файл со столбца A, по столбец I(включительно).
Как должен выглядеть финальный результат: создаются файлы с названием(к примеру) «08.06.2020 55.34-ПП (1).xlsx», «08.06.2020 55.34-ПП (2).xlsx», «09.06.2020 55.34-ПП (2).xlsx» и так далее, в которых содержится информация из диапазона A:I. В файле с названием «08.06.2020 55.34-ПП (1).xlsx» должны содержатся все строки где Дата 2 (J) и Договор (I) соответствуют тому, что в названии.

Важный момент: нельзя сохранить файл со слешем в названии из Договора (I), поэтому его необходимо заменять на точку.

exPower

Сообщение Добрый день!

Такая проблема: нужно срочно разделить огромный массив данных и сгруппировать его в новых файлах по фильтру. В ручную это делать очень долго и невыносимо.
Суть:
В рабочем файле десяток столбцов и полторы тысячи строк. Нужен макрос, который отсортирует по двум параметрам и сохранит результат отдельным файлам с названием из ячеек(сперва дата, затем договор).

А именно:
Фильтр по ячейке Дата 2 (J) и Договор (I).
Диапазон сохранения данных в новый файл со столбца A, по столбец I(включительно).
Как должен выглядеть финальный результат: создаются файлы с названием(к примеру) «08.06.2020 55.34-ПП (1).xlsx», «08.06.2020 55.34-ПП (2).xlsx», «09.06.2020 55.34-ПП (2).xlsx» и так далее, в которых содержится информация из диапазона A:I. В файле с названием «08.06.2020 55.34-ПП (1).xlsx» должны содержатся все строки где Дата 2 (J) и Договор (I) соответствуют тому, что в названии.

Важный момент: нельзя сохранить файл со слешем в названии из Договора (I), поэтому его необходимо заменять на точку.

Автор — exPower
Дата добавления — 08.10.2020 в 13:02

Источник

Vba excel разбить файл

Всем доброго времени суток!

Имеется файл с большим количеством строк такого типа:

Требуется разбить файл на несколько по первому столбцу (для каждого филиала свой файлик).
С VBA сталкиваюсь впервые, подскажите, пожалуйста, с чего начать, куда копать..
Возможно у кого-то уже есть что-то либо подобное.
Буду очень благодарен за помощь!

Всем доброго времени суток!

Имеется файл с большим количеством строк такого типа:

Требуется разбить файл на несколько по первому столбцу (для каждого филиала свой файлик).
С VBA сталкиваюсь впервые, подскажите, пожалуйста, с чего начать, куда копать..
Возможно у кого-то уже есть что-то либо подобное.
Буду очень благодарен за помощь! evgen7e

Сообщение Всем доброго времени суток!

Имеется файл с большим количеством строк такого типа:

Требуется разбить файл на несколько по первому столбцу (для каждого филиала свой файлик).
С VBA сталкиваюсь впервые, подскажите, пожалуйста, с чего начать, куда копать..
Возможно у кого-то уже есть что-то либо подобное.
Буду очень благодарен за помощь! Автор — evgen7e
Дата добавления — 07.07.2019 в 19:58

Источник

Как разделить файл Excel на отдельные файлы (по листам)

Такое бывает довольно часто, делаешь ежегодный отчет, а в нем 12 месяцев, соответственно 12 листов. И нужно разделить этот файл таким образом, чтобы каждый лист стал отдельным файлом.

И конечно же, можно сделать это руками, но это крайне долго и неэффективно.

Я продемонстрирую вам простой код Visual Basic, который выполнит задачу за вас.

Делим файл Excel на несколько файлов по листам

Допустим, у нас есть ежегодный отчет, в котором по листам расписаны показатели компании за каждый месяц. Как на картинке ниже:

Код Visual Basic, который разделит таблицу на несколько файлов по месяцам:

Перед тем, как запустите этот код, сделайте следущее:

  1. Создайте новую папку, куда поместите результаты работы этого кода;
  2. А также, на всякий случай, сделайте копию оригинального файла.

Теперь создайте функцию в Visual Basic и смело запускайте код.

Этот код сам найдет путь до папки с файлом.

Как он работает?

Довольно просто, он открывает каждый лист и сохраняет его как отдельный файл с тем же названием.

Куда поместить этот код?

  • Щелкните на «Разработчик»;

  • Далее откройте VBA;

  • Правой кнопкой мышки на любой лист;.

  • Щелкните на «Insert» -> «Module»;

  • Поместите наш код в открывшееся окошко;

  • Теперь запустите код.

Итак, как только вы запустите код, он сразу же разделит ваш файл на несколько файлов по листам. Это крайне удобно, советую его сохранить. Даже если сейчас он вам не нужен, в будущем обязательно пригодится.

Как я говорил ранее, имя файла такое же, как и имя листа.

Также не забудьте сохранить файл с соответствующим расширением(.XLSM), так как мы используем функции Visual Basic.

В коде я специально сделал так, чтобы вы не видели все что происходит и это вам не мешало. Вы можете исправить это если вам наоборот нужно видеть то, что происходит.

Но также, опять повторюсь, обязательно сделайте копию вашего файла перед использованием функции! Потому что если работа Excel завершится из-за какой-либо ошибки или произойдет еще что-то неожиданное вы можете потерять свои данные!

Делим файл Excel на несколько PDF файлов по листам

Вот код для такого случая:

И снова, не забудьте сначала создать папку и обязательно сделать копию оригинального файла. Код разделит вашу табличку по страницам и создаст для каждой страницы отдельный PDF файл.

Разделите только те рабочие листы, в которых содержится слово/фраза, на отдельные файлы Excel

Бывают и такие ситуации, что отдельный файл нужно создать только для тех страниц, в названии которых есть определенный текст.

Допустим, у вас есть страницы отчета за разные года, в названии каждого листа указан год и месяц. Но вам нужно сохранить только те листы, которые относятся к 2020 году. Как это сделать?

Вот код Visual Basic:

Как вы могли заметить, прямо в коде, мы создали переменную и задали ей значение 2020.

Затем этот код просто проходится по каждой странице и проверяет есть ли в имени нужная нам часть (то есть нужный год). А далее сохраняет отдельно только те листы, в имени которых он нашел совпадения.

Если совпадения не будут найдены — результат будет 0.

В этом коде используется цикл «Если/То». Если он находит нужное текстовое значение в имени листа, то сохраняет его отдельно, если не находит — просто пропускает.

Источник

Adblock
detector

0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

1

Разделение файла на несколько частей(макрос)

29.04.2014, 13:19. Показов 30031. Ответов 21


Студворк — интернет-сервис помощи студентам

Ребят кто-нить помогите. Я уже отчаялся не знаю как сделать это «Разделить файл на несколько частей с помощью макроса в Excel». Может остались люди добрые, буду признателен.



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

29.04.2014, 13:46

2

1. Какой файл — двоичный, текстовый, книга Excel, документ Word, …?
2. Как соответственно делить — на куски заданного размера, на куски заданного размера, но не разрывая слов, по листам, по страницам, …?



0



0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

29.04.2014, 17:11

 [ТС]

3

Файл Excel, делить на куски заданного размера.

Добавлено через 1 час 38 минут
Значит уже никто не поможет =

Добавлено через 1 час 39 минут
Если сможешь помочь помоги будь добр =



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

29.04.2014, 19:00

4

Лучший ответ Сообщение было отмечено Scorpion86rus как решение

Решение

Пробуйте

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Scorpion86rus()
Dim bytesLeft&, partSize&, b() As Byte, x, f%, g%, cnt&
x = Application.GetOpenFilename("All files,*.*")
If x = "False" Then Exit Sub
partSize = InputBox("Введите размер части (байт)", , 5000)
f = FreeFile
Open x For Binary Access Read As f
bytesLeft = LOF(f)
ReDim b(1 To partSize)
Do
  If UBound(b) > bytesLeft Then ReDim b(1 To bytesLeft)
  bytesLeft = bytesLeft - UBound(b)
  Get f, , b
  g = FreeFile
  cnt = cnt + 1
  Open x & Format(cnt, "_000.bin") For Binary Access Write As g
  Put g, , b
  Close g
Loop While bytesLeft
Close f
MsgBox "Записано " & cnt & " файлов", vbInformation
End Sub

Добавлено через 8 минут
Объединить части обратно можно консольной командой

Bash
1
copy /b file1+file2+file3 newfile



1



0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

29.04.2014, 19:19

 [ТС]

5

Теперь бы понять, что где, куда, зачем и как =



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

29.04.2014, 19:27

6

F1 — Создание макроса



0



0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

29.04.2014, 19:33

 [ТС]

7

Ну вот например у меня файл есть. С макросами я не очень вообще.



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

29.04.2014, 23:37

8

Лучший ответ Сообщение было отмечено Scorpion86rus как решение

Решение

Чувствую я, что совсем не это Вам нужно. Ну вот макрос в файле.



2



0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

30.04.2014, 05:35

 [ТС]

9

Огромное спасибо. Прям жизнь спас. Еще остались все же добрые люди.



0



0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

02.05.2014, 12:59

 [ТС]

10

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



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

02.05.2014, 22:47

11

Scorpion86rus, получайте.
Я комментировал не все, а в основном то, что является сутью алгоритма. Остальное найдете в Справке, учебниках и в Сети.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub Scorpion86rus()
Dim bytesLeft&, partSize&, b() As Byte, fileName, f%, g%, cnt&, baseName$
fileName = Application.GetOpenFilename("All files,*.*", , "Выберите файл для деления")
If fileName = False Then Exit Sub
  'из полного пути выделяем имя файла с ""
baseName = Right$(fileName, Len(fileName) - InStrRev(fileName, "") + 1)
With Application.FileDialog(msoFileDialogFolderPicker)
  .Title = "Выберите папку для сохранения"
  .Show
  If .SelectedItems.Count = 0 Then Exit Sub
    'формируем основу пути файла для сохранения из выбранной папки и имени файла для деления
  baseName = .SelectedItems(1) & baseName
End With
partSize = InputBox("Введите размер части (байт)", , 5000)
f = FreeFile
Open fileName For Binary Access Read As f
bytesLeft = LOF(f)     'размер файла в байта, столько байт осталось записать
ReDim b(1 To partSize) 'буфер длиной с размер части
Do
    'если длина буфера больше, чем осталось записать байт,
    'делаем буфер длиной сколько байт осталось, это будет последний файл
  If UBound(b) > bytesLeft Then ReDim b(1 To bytesLeft)
    'уменьшаем число оставшихся байт на размер буфера
  bytesLeft = bytesLeft - UBound(b)
    'считываем очередной кусок файла в буфер
  Get f, , b
  g = FreeFile
    'увеличиваем счетчик файлов на 1
  cnt = cnt + 1
    'записываем очередной файл
  Open baseName & Format(cnt, "_000.bin") For Binary Access Write As g
  Put g, , b
  Close g
    'продолжаем цикл, пока осталось записать байт >0
Loop While bytesLeft
Close f
MsgBox "Записано " & cnt & " файлов", vbInformation
End Sub

Вложения

Тип файла: xls делительФайлов1.xls (36.5 Кб, 170 просмотров)



1



0 / 0 / 0

Регистрация: 13.04.2014

Сообщений: 15

02.05.2014, 23:17

 [ТС]

12

Спасибо еще раз и извини за беспокойство, и доставления не удобств.



0



0 / 0 / 0

Регистрация: 20.11.2018

Сообщений: 6

02.12.2018, 13:46

13

Казанский, добрый день! Сможете ли Вы на платной основе написать макро такого плана — деление файла на 500 строк и сохранение каждого в таблицу хмл 2003?



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

02.12.2018, 14:16

14

Цитата
Сообщение от katya1183
Посмотреть сообщение

деление файла на 500 строк и сохранение каждого в таблицу хмл 2003?

не смогла понять
—или каждую из 500 строк в отдельный XML
—или каждые 500 строк в отдельный XML
—чем XML-2003 отличается от XML-2016
—или вы ошиблись и речь идет о XLS и EXCEL-2003



0



0 / 0 / 0

Регистрация: 20.11.2018

Сообщений: 6

04.12.2018, 20:03

15

Добрый день! я дуб дубом в екселях и прочих…. Поэтому опишу, что я делаю и что мне нужно. У меня есть поставщики, которые предоставляют файл наличия товаров для выгрузки в интернет магазин. Этот файл очень большой 20 тыс товаров. Чтобы обновить все товары на сайте я должна этот файл разделить на 500, т.к в магазин больше не загрузишь, программа сразу вылетает. Грубо говоря в файле 20 тысяч комплекто востельного белья а мне надо по 500. и так прогружать каждый файл. Файл я скачиваю в таком формате. — XML. ЗАТЕМ В НОТЕПАД ++ МЕНЯЮ И ОТКРЫВАЮ УЖЕ ПРИ ПОМОЩИ ЕКСЕЛЬ. ЗАТЕ ДЕРБАНЮ НА ФАЙЛЫ ПО 500 ТОВАРОВ В КАЖДОМ И СОХРАНЯЮ (СОХРАНИТЬ КАК) ТАБЛИЦА XML 2003/иМЕННО ЭТОТ ФОРМАТ МОЖНО ЗАГРУЗИТЬ НА САЙТ
Можно ли написать макрос такого плана. или из ряда фантастики?



0



0 / 0 / 0

Регистрация: 20.11.2018

Сообщений: 6

08.12.2018, 15:10

16

Добрый деньshanemac51, Добрый день! я дуб дубом в екселях и прочих…. Поэтому опишу, что я делаю и что мне нужно. У меня есть поставщики, которые предоставляют файл наличия товаров для выгрузки в интернет магазин. Этот файл очень большой 20 тыс товаров. Чтобы обновить все товары на сайте я должна этот файл разделить на 500, т.к в магазин больше не загрузишь, программа сразу вылетает. Грубо говоря в файле 20 тысяч комплекто востельного белья а мне надо по 500. и так прогружать каждый файл. Файл я скачиваю в таком формате. — XML. ЗАТЕМ В НОТЕПАД ++ МЕНЯЮ И ОТКРЫВАЮ УЖЕ ПРИ ПОМОЩИ ЕКСЕЛЬ. ЗАТЕ ДЕРБАНЮ НА ФАЙЛЫ ПО 500 ТОВАРОВ В КАЖДОМ И СОХРАНЯЮ (СОХРАНИТЬ КАК) ТАБЛИЦА XML 2003/иМЕННО ЭТОТ ФОРМАТ МОЖНО ЗАГРУЗИТЬ НА САЙТ
Можно ли написать макрос такого плана. или из ряда фантастики?



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

08.12.2018, 21:34

17

Цитата
Сообщение от katya1183
Посмотреть сообщение

ЗАТЕМ В НОТЕПАД ++ МЕНЯЮ

а в нем то что делаете



0



0 / 0 / 0

Регистрация: 20.11.2018

Сообщений: 6

09.12.2018, 15:10

18

кодировки и сохраняю в utf8. ВСе! Открываю этот файл в ексель и делю на части. затем сохраняю хмл 2003



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

09.12.2018, 16:59

19

Цитата
Сообщение от katya1183
Посмотреть сообщение

Файл я скачиваю в таком формате. — XML.

хотелось бы его увидеть —предполагаю, что это длиннющая строка без нормальной разбивки на подстроки(по документам)

пару дней назад видела файл в одну строку в 840мб
причем без явных тегов разбиения по фио и разным составом тегов по фио



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

23.01.2019, 09:40

20

Цитата
Сообщение от katya1183
Посмотреть сообщение

У меня есть поставщики, которые предоставляют файл наличия товаров для выгрузки в интернет магазин. Этот файл очень большой 20 тыс товаров.

выложите пример файла



0



Разделитель Excel документов

Разделите Excel на несколько файлов онлайн. Используйте разделитель Excel документов с любого устройства с современным браузером вроде Chrome и Firefox.

Отправить ссылку на скачивание

Excel Файлы электронных таблиц

Файл электронной таблицы содержит данные в виде строк и столбцов. Вы можете открывать, просматривать и редактировать такие файлы с помощью приложений для работы с электронными таблицами, таких как Microsoft Excel, которые теперь доступны как для операционных систем Windows, так и для MacOS. Точно так же Google Sheets — это бесплатный онлайн-инструмент для создания и редактирования электронных таблиц, который работает в любом веб-браузере.

  • Легкое разделение Excel страниц документа
  • Отделить страницы от Excel файла
  • Загрузка или отправка результирующего файла в виде вложения электронной почты
Как разделить Excel документ онлайн
  • Выберите и загрузите Excel документ, который хотите разделить.
  • Укажите необходимые номера страниц и нажмите кнопку Разделить.
  • Нажмите кнопку Скачать и сохраните разделенный Excel документ.
  • Чтобы отправить ссылку на скачивание документа по электронной почте нажмите кнопку Email.

ВОПРОСЫ И ОТВЕТЫ

Другие форматы, поддерживаемые GroupDocs.Splitter

Вы также можете разделять документы других форматов. Полный список представлен ниже.

Сохранение листов книги как отдельных файлов

Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно «разобрать», т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.

save-sheets-as-files.png

Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.

Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.

Способ 1. Простое разделение

Нажмите сочетание Alt+F11 или выберите в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor) , вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:

Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.

Способ 2. Разделение с сохранением

При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:

Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например «D:Отчеты2012» и т.п.

Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла — параметр FileFormat:

Для основных типов файлов значения параметра FileFormat следующие:

  • XLSX = 51
  • XLSM = 52
  • XLSB = 50
  • XLS = 56
  • TXT = 42

Способ 3. Сохранение в новые книги только выделенных листов

Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:

Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.

Способ 4. Сохранение только выделенных листов в новый файл

Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:

Способ 5. Сохранение листов как отдельных PDF-файлов

  • для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
  • листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
  • книга должна быть сохранена на момент экспорта

Нужный нам код будет выглядеть следующим образом:

Способ 6. Готовый макрос из надстройки PLEX

Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:

Как разделить вкладки в excel на два отдельных файла

Как разделить вкладки в Excel?

  1. Выделите ячейку в том месте, где необходимо разделить лист. …
  2. Откройте вкладку Вид на Ленте, а затем нажмите команду Разделить.
  3. Лист будет разделен на несколько областей.

Как разделить окна в Excel на два монитора?

  1. Откройте первый файл Excel, к которому вы хотите получить доступ, и поместите его на монитор.
  2. Откройте второй экземпляр Excel на мониторе № 2, выбрав « Пуск»> «Программы»> «Microsoft Office»> «Excel» .
  3. Переместите этот второй экземпляр Excel в Monitor # 2 .

Как разделить одну таблицу на две в Excel?

  1. Установить курсор мыши на нужную строку таблицы, и нажать сочетание клавиш Ctrl+Shift+Enter. Таблица разделится на 2 части
  2. Выбираете меню «Файл — Работа с таблицами — Макет», и в нем находите и выбираете пункт «Разбить таблицу». Работа с таблицами Макет Разделить таблицу

Как открыть 2 файла Excel на одном мониторе?

  1. Откройте обе книги, которые содержат листы для сравнения.
  2. На вкладке Вид в группе Окно выберите команду Рядом . …
  3. В окне каждой книги щелкните лист, который нужно сравнить.

Как вывести на экран два файла Excel?

  1. После открытия перейдите в панели быстрого доступа на вкладку «Вид».
  2. После нажатия на пиктограмму «Упорядочить все» на экране появится окошко с контекстным меню, предлагающим выбор расположения окон:

Как разделить таблицу в Excel по вертикали?

  1. Щелкните ячейку таблицы, которую вы хотите разделить.
  2. В разделе Работа с таблицами на вкладке Макет в группе Объединение нажмите кнопку Разделить ячейки и сделайте следующее: Для разделения ячейки по вертикали в поле Число столбцов введите нужное число новых ячеек.
  1. Щелкните ячейку в таблице, из которой вы хотите отделиться, и в Работа с таблицами вкладку нажмите макет > Разделить таблицу, см. …
  2. И таблица была разделена на две таблицы по горизонтали, как показано на следующем снимке экрана:

Как разделить Excel?

  1. Выделите одну или несколько ячеек, которые хотите разделить. …
  2. На вкладке Данные в группе Работа с данными нажмите кнопку Текст по столбцам. …
  3. Установите переключатель С разделителями, если выбран другой вариант, и нажмите кнопку Далее.
  1. Щелкните правой кнопкой мыши по значку Excel на панели задач и выберите Microsoft Excel 2010 (или 2007): Затем перейдите в меню File (Файл) > Open (Открыть) и выберите вашу вторую книгу.
  2. Щелкните по значку программы на панели задач, удерживая клавишу Shift.

Как разделить окно (лист) в Excel Reviewed by Unknown on 2016-01-21T23:56:00+02:00 Rating: 5

Как разделить окно (лист) в Excel

Как разделить окно (лист) в Excel

Разделение листов и просмотр книги Excel в разных окнах

  1. Откройте вкладку Вид на Ленте, а затем выберите команду Новое окно.Excel в разных окнах
  2. Откроется новое окно для текущей книги.Excel в разных окнах
  3. Теперь Вы можете сравнивать листы одной и той же книги в разных окнах. В нашем примере мы выберем отчет по продажам за 2013 год, чтобы сравнить продажи в 2012 и в 2013 годах.Excel в разных окнах

Excel в разных окнах

  1. Выделите ячейку в том месте, где необходимо разделить лист. Если Вы выберите ячейку в первом столбце или первой строке, то лист разделится на 2 части, в противном случае на 4. В нашем примере мы выберем ячейку C7.Excel в разных окнах
  2. Откройте вкладку Вид на Ленте, а затем нажмите команду Разделить.Excel в разных окнах
  3. Лист будет разделен на несколько областей. Вы можете прокручивать каждую область отдельно, используя полосы прокрутки. Это позволит Вам сравнивать различные разделы одного и того же листа.Excel в разных окнах

Понравилась статья? Поделить с друзьями:
  • Макрос по нажатию кнопки в excel
  • Макрос по генерации случайных чисел в excel
  • Макрос печать всех страниц excel
  • Макрос печати файла excel
  • Макрос печати листа excel в pdf