Vba несколько книг excel в одну

Сборка листов из разных книг в одну

Предположим, имеется куча книг Excel, все листы из которых надо объединить в один файл. Копировать руками долго и мучительно, поэтому имеет смысл использовать несложный макрос.

Открываем книгу, куда хотим собрать листы из других файлов, входим в редактор Visual Basic сочетанием клавиш Alt+F11 одноименной кнопкой на вкладке Разработчик (Developer — Visual Basic), добавляем новый пустой модуль (в меню Insert — Module) и копируем туда текст вот такого макроса:

 
Sub CombineWorkbooks()
    Dim FilesToOpen
    Dim x As Integer

    Application.ScreenUpdating = False  'отключаем обновление экрана для скорости
    
    'вызываем диалог выбора файлов для импорта
    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="All files (*.*), *.*", _
      MultiSelect:=True, Title:="Files to Merge")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "Не выбрано ни одного файла!"
        Exit Sub
    End If
    
    'проходим по всем выбранным файлам
    x = 1
    While x <= UBound(FilesToOpen)
        Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
        Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        importWB.Close savechanges:=False
        x = x + 1
    Wend

    Application.ScreenUpdating = True
End Sub

После этого можно вернуться в Excel и запустить созданный макрос на вкладке Разработчик кнопкой Макросы (Developer — Macros) или нажав Alt+F8. Отобразится диалоговое окно открытия файла, где необходимо указать один или несколько (удерживая Ctrl или Shift) файлов, листы из которых надо добавить к текущей книге — и задача решена!

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

  • Что такое макросы, куда вставлять код макроса на Visual Basic
  • Автоматическая сборка заданных листов из заданных книг с помощью надстройки PLEX
  • Автоматическая сборка данных с нескольких листов на один итоговый лист с помощью надстройки PLEX

Вы когда-нибудь застревали, когда вам нужно было объединить несколько книг в основную книгу в Excel? Самое ужасное, что книги, которые нужно объединить, содержат несколько листов. И как объединить только указанные листы нескольких книг в одну книгу? В этом руководстве показано несколько полезных методов, которые помогут вам поэтапно решить проблему.

  • Способ A: Объедините несколько книг в одну с помощью функции перемещения или копирования
  • Способ B: Объединение нескольких книг или указанных листов книг в основную книгу с помощью VBA
  • Метод C: Легко объединяйте несколько книг или указанные листы книг в одну книгу

Объедините несколько книг в одну книгу с помощью функции перемещения или копирования

Если необходимо объединить всего несколько книг, вы можете использовать команду «Переместить» или «Копировать», чтобы вручную переместить или скопировать листы из исходной книги в основную книгу.

1. Откройте книги, которые вы объедините в основную книгу.

2. Выберите листы в исходной книге, которые вы переместите или скопируете в основную книгу.

Ноты:

1). Вы можете выбрать несколько несмежных листов, удерживая Ctrl и щелкая вкладки листа одну за другой.

2). Чтобы выбрать несколько соседних листов, нажмите вкладку первого листа и удерживайте Shift ключ, а затем щелкните вкладку последнего листа, чтобы выбрать их все.

3). Вы можете щелкнуть правой кнопкой мыши на любой вкладке листа, щелкнуть Выбрать все листы в контекстном меню, чтобы выбрать все листы в книге одновременно.

3. После выбора необходимых листов щелкните правой кнопкой мыши вкладку листа, а затем щелкните Переместить или скопировать из контекстного меню. Смотрите скриншот:

4. Затем Переместить или скопировать всплывает диалоговое окно в Бронировать в раскрывающемся списке выберите основную книгу, в которую вы переместите или скопируете листы. Выберите переместить, чтобы закончить в Перед листом поле, отметьте Создать копию поле и, наконец, щелкните OK кнопку.

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


Объединение нескольких книг или указанных листов книг в основную книгу с помощью VBA

Если необходимо объединить несколько книг в одну, вы можете применить следующие коды VBA, чтобы быстро добиться этого. Пожалуйста, сделайте следующее.

1. Поместите все книги, которые вы хотите объединить, в одну в один каталог.

2. Запустите файл Excel (эта книга будет основной книгой).

3. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, затем скопируйте ниже код VBA в окно модуля.

Код VBA 1: объединить несколько книг Excel в одну

Sub GetSheets()
'Updated by Extendoffice 2019/2/20
Path = "C:UsersdtDesktopdt kte"
Filename = Dir(Path & "*.xlsx")
  Do While Filename <> ""
  Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     For Each Sheet In ActiveWorkbook.Sheets
     Sheet.Copy After:=ThisWorkbook.Sheets(1)
  Next Sheet
     Workbooks(Filename).Close
     Filename = Dir()
  Loop
End Sub
	

Ноты:

1. Приведенный выше код VBA сохранит имена листов исходных книг после слияния.

2. Если вы хотите различать, какие рабочие листы в главной книге были получены после слияния, примените приведенный ниже код VBA 2.

3. Если вы просто хотите объединить указанные листы книг в основную книгу, может помочь приведенный ниже код VBA 3.

В кодах VBA: «C: Users DT168 Рабочий стол KTE »- это путь к папке. В коде VBA 3 «Лист1, Лист3«- это указанные рабочие листы книг, которые вы объедините в основную книгу. Вы можете изменить их в зависимости от ваших потребностей.

Код VBA 2: объединить книги в одну (каждый рабочий лист будет назван с префиксом исходного имени файла):

Sub MergeWorkbooks()
'Updated by Extendoffice 2019/2/20
Dim xStrPath As String
Dim xStrFName As String
Dim xWS As Worksheet
Dim xMWS As Worksheet
Dim xTWB As Workbook
Dim xStrAWBName As String
On Error Resume Next
xStrPath = "C:UsersDT168DesktopKTE"
xStrFName = Dir(xStrPath & "*.xlsx")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set xTWB = ThisWorkbook
Do While Len(xStrFName) > 0
    Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
    xStrAWBName = ActiveWorkbook.Name
    For Each xWS In ActiveWorkbook.Sheets
    xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
    Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
    xMWS.Name = xStrAWBName & "(" & xMWS.Name & ")"
    Next xWS
    Workbooks(xStrAWBName).Close
    xStrFName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Код VBA 3: объединить указанные листы книг в основную книгу:

Sub MergeSheets2()
'Updated by Extendoffice 2019/2/20
Dim xStrPath As String
Dim xStrFName As String
Dim xWS As Worksheet
Dim xMWS As Worksheet
Dim xTWB As Workbook
Dim xStrAWBName As String
Dim xI As Integer
On Error Resume Next

xStrPath = " C:UsersDT168DesktopKTE"
xStrName = "Sheet1,Sheet3"

xArr = Split(xStrName, ",")

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set xTWB = ThisWorkbook
xStrFName = Dir(xStrPath & "*.xlsx")
Do While Len(xStrFName) > 0
Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
xStrAWBName = ActiveWorkbook.Name
For Each xWS In ActiveWorkbook.Sheets
For xI = 0 To UBound(xArr)
If xWS.Name = xArr(xI) Then
xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.count)
Set xMWS = xTWB.Sheets(xTWB.Sheets.count)
xMWS.Name = xStrAWBName & "(" & xArr(xI) & ")"
Exit For
End If
Next xI
Next xWS
Workbooks(xStrAWBName).Close
xStrFName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

4. нажмите F5 ключ для запуска кода. Затем все рабочие листы или указанные рабочие листы рабочих книг в определенной папке сразу объединяются в основную книгу.


Легко объединяйте несколько книг или указанные листы книг в одну книгу

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

1. Создайте новую книгу и щелкните Кутулс Плюс > Сочетать. Затем появится диалоговое окно с напоминанием о том, что все объединенные книги должны быть сохранены, а функция не может быть применена к защищенным книгам, нажмите кнопку OK кнопку.

2. в Комбинировать листы мастер, выберите Объедините несколько листов из книг в одну книгу вариант, а затем щелкните Download кнопка. Смотрите скриншот:

3. в Объединить рабочие листы — шаг 2 из 3 диалогового окна, нажмите Добавить > Файл or Папка чтобы добавить файлы Excel, которые вы объедините в один. После добавления файлов Excel щелкните значок Завершить и выберите папку для сохранения основной книги. Смотрите скриншот:

Теперь все книги объединены в одну.

По сравнению с двумя вышеуказанными методами, Kutools for Excel имеет следующие преимущества:

  • 1) Все книги и рабочие листы перечислены в диалоговом окне;
  • 2) Для листов, которые вы хотите исключить из объединения, просто снимите флажок;
  • 3) Пустые рабочие листы исключаются автоматически;
  • 4) Исходное имя файла будет добавлено в качестве префикса к имени листа после объединения;
  • Чтобы узнать о дополнительных функциях этой функции, пожалуйста, посетите здесь.

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.


Kutools for Excel — Помогает всегда закончить работу раньше времени, чтобы у вас было больше времени, чтобы наслаждаться жизнью

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

300 расширенных инструментов для 1500 рабочих сценариев сделают вашу работу намного проще, чем когда-либо.
Больше не нужно запоминать формулы и коды VBA, теперь дайте вашему мозгу отдохнуть.
Сложные и повторяющиеся операции могут быть выполнены разовой обработкой за секунды.
Сократите количество операций с клавиатурой и мышью каждый день, попрощайтесь с профессиональными заболеваниями прямо сейчас.
Станьте экспертом по Excel за 3 минуты, это поможет вам быстро получить признание и продвижение по службе.
110,000 300 высокоэффективных людей и выбор XNUMX+ всемирно известных компаний.
Сделайте так, чтобы ваши 39.0 доллара были больше, чем обучение других людей.
Полнофункциональная бесплатная пробная версия 30-день. 60-дневная гарантия возврата денег без объяснения причин.

I am a novice at Visual Basic. I can use either Excel 2010 or Excel 2013 for this task.

I have dozens of workbooks with data on the first worksheet of each. For example One.xlsx, Two.xlsx, Three.xlsx, Four.xlsx each contain information on their respective Sheet1.

I need the information on Sheet1 from each workbook to be combined into a single workbook with sheets that are named from the file name of the original workbook. So for example combined.xlsx would have 4 sheets named One, Two, Three, Four. In every case all information on the underlying worksheets should be copied and combined in the new Workbook as shown below.

  • The Format I need

enter image description here

I found this Macro / Add-In online that gets me close to what I need using the open files add in choice.

Merge Excel Sheets Macro

The Open Files Add-In successfully allows me to aggregate the various Workbook’s worksheets into a single workbook. However the tabs are not named from the name of the original file.

  • Correct aggregation of sheets, but incorrect worksheet names.

enter image description here

For now all the underlying Workbooks will be in the same folder. The ability to browse and select the files would be nice if this ever changes but if that is too difficult, just indicating the directory path in the Visual Basic code would work. As far as the resultant combined output probably ought to be a new workbook, the filename of the new workbook isn’t that important. It could be called combined.xlsx for example.

If you’re looking to consolidate multiple Excel workbooks with minimal effort, you’ve come to the right place.

Laptop screen with code display

When working with varied data sources, you might often struggle to compile multiple workbooks and worksheets before arriving at one final data piece. Imagine a situation where you have a few hundred workbooks to combine before you can even begin your day.

No one wants to spend endless hours working on different sources, opening each workbook, copying and pasting the data from various sheets, before finally making one consolidated workbook. What if a VBA macro can do this for you?

With this guide, you can create your own Excel VBA macro code to consolidate multiple workbooks, all in a matter of minutes (if the data files are a lot).

Pre-Requisites for Creating Your Own VBA Macro Code

You need one workbook to house the VBA code, while the rest of the source data workbooks are separate. Additionally, create one workbook Consolidated to store the consolidated data from all your workbooks.

Create a folder Consolidation at your preferred location to store all your source workbooks. When the macro runs, it would toggle through each workbook stored within this folder, copy the contents from various sheets, and place it in the Consolidated workbook.

Creating Your Own Excel VBA Code

Once the pre-requisites are out of the way, it is time to delve into the code and start hacking away at the basics to adapt it to your requirements.

Press the Alt+F11 key on Excel to open the VBA macro code editor. Paste the code written below and save the file as a Macro enabled workbook (.xlsm extension).

  Sub openfiles()'declare the variables used within the VBA codeDim MyFolder As String, MyFile As String, wbmain As Workbook, lastrow As Long'disable these functions to enhance code processingWith Application.DisplayAlerts = False.ScreenUpdating = FalseEnd With'change the path of the folder where your files are going to be savedMyFolder = InputBox("Enter path of the Consolidation folder") & ""'define the reference of the folder in a macro variableMyFile = Dir(MyFolder)'open a loop to cycle through each individual workbook stored in the folderDo While Len(MyFile) > 0'activate the Consolidation workbookWindows("Consolidation").Activate'calculate the last populated rowRange("a1048576").SelectSelection.End(xlUp).SelectActiveCell.Offset(1, 0).Select'open the first workbook within the Consolidation folderWorkbooks.Open Filename:=MyFolder & MyFileWindows(MyFile).Activate'toggle through each sheet within the workbooks to copy the dataDim ws As WorksheetFor Each ws In Sheets ws.Activate ws.AutoFilterMode = False 'ignore the header and copy the data from row 2 If Cells(2, 1) = "" Then GoTo 1 GoTo 101: Next10: Range("a2:az20000").CopyWindows("Consolidation").Activate'paste the copied contentsActiveSheet.PasteWindows(MyFile).Activate'close the open workbook once the data is pastedActiveWorkbook.Close'empty the cache to store the value of the next workbookMyFile = Dir()'open the next file in the folderLoop'enable the disabled functions for future useWith Application.DisplayAlerts = True.ScreenUpdating = TrueEnd WithEnd Sub 

The VBA Code Explained

The first part of the code is defining a subroutine, which holds all your VBA code. Define the subroutine with sub, followed by the name of the code. The sub name can be anything; ideally, you should keep a name relevant to the code you are about to write.

Excel VBA understands user-created variables and their corresponding data types declared with dim (dimension).

To enhance the processing speed of your code, you can turn off screen updating and suppress all alerts, as that slows down the code execution.

The user will be prompted for the path of the folder where the data files are stored. A loop is created to open each workbook stored within the folder, copy the data from each sheet, and append it to the Consolidation workbook.

Excel VBA code snippet

The Consolidation workbook is activated so that Excel VBA can calculate the last populated row. The last cell within the worksheet is selected, and the last row is calculated within the workbook using the offset function. This is highly useful, when the macro starts appending data from the source files.

As the loop opens the first source file, the filters are removed from every single sheet (if they exist), and the data ranging from A2 to AZ20000 will be copied and pasted into the Consolidation workbook.

The process is repeated until all the workbook sheets are appended within the master workbook.

Finally, the source file is closed once all the data is pasted. The next workbook is opened so that the VBA macro can repeat the same steps for the next set of files.

Excel VBA code snippet

The loop is coded to run till all the files are automatically updated in the master workbook.

User-Based Customizations

Sometimes, you don’t want to worry about inbuilt prompts, especially, if you are the end-user. If you would rather hardcode the path of the Consolidation folder in the code, you can change this part of the code:

  MyFolder = InputBox("Enter path of the Consolidation folder") & "" 

To:

  MyFolder = &ldquo;Folder path&rdquo; & "" 

Additionally, you can also change the column references, as the step is not included in this code. Just replace the end column reference with your last populated column value (AZ, in this case). You need to remember that the last populated row is calculated via the macro code, so you need to change the column reference only.

To make the most out of this macro, you can use it only to consolidate workbooks in the same format. If the structures are different, you can’t use this VBA macro.

Consolidating Multiple Workbooks Using Excel VBA Macro

Creating and modifying an Excel VBA code is relatively easy, especially if you understand some of the nuances within the code. VBA systematically runs through each code line and executes it line by line.

If you make any changes to the code, you must ensure you don’t change the order of the codes, as that will disrupt the code’s execution.

Хитрости »

1 Май 2011              765519 просмотров


Как собрать данные с нескольких листов или книг?

Очень часто бывает необходимо собрать данные с нескольких листов одной книги или даже с листов нескольких книг. Например, каждую неделю мы получаем некие отчеты от отделов, которые необходимо собрать в одну общую таблицу для построения сводной таблицы. Или это могут быть некие книги прайсов по товарам от разных поставщиком, который опять же надо сначала объединить, а потом уже анализировать. Вручную делать это довольно муторно. И то, муторно это только для первых 20-ти листов/файлов, потом становится просто тошно. Поэтому решил поделиться решением, которое поможет собрать данные со всех листов книги, со всех листов всех указанных книг или только с указанных листов:

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          https://www.excel-vba.ru
'          info@excel-vba.ru
'          WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
' Purpose: http://www.excel-vba.ru/chto-umeet-excel/kak-sobrat-dannye-s-neskolkix-listov-ili-knig/
'             Процедура сбора данных с нескольки листов/книг
'---------------------------------------------------------------------------------------
Option Explicit
 
Sub Consolidated_Range_of_Books_and_Sheets()
    Dim iBeginRange As Range, rCopy As Range, lCalc As Long, lCol As Long
    Dim oAwb As String, sCopyAddress As String, sSheetName As String
    Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Worksheet, wsDataSheet As Worksheet, bPolyBooks As Boolean, avFiles
    Dim wbAct As Workbook
    Dim bPasteValues As Boolean, IsPasteSheetName As Boolean
 
    On Error Resume Next
    'Выбираем диапазон выборки с книг
    Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                                           "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                                           vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
    'для указания диапазона без диалогового окна:
    'Set iBeginRange = Range("A1:A10") 'диапазон указывается нужный
    'Если диапазон не выбран - завершаем процедуру
    If iBeginRange Is Nothing Then
        Exit Sub
    End If
    'Указываем имя листа
    'Допустимо указывать в имени листа символы подставки ? и *.
    'Если указать только * то данные будут собираться со всех листов
    sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр")
    'Если имя листа не указано - данные будут собраны со вех листов
    If sSheetName = "" Then
        sSheetName = "*"
    End If
    'добавлять ли имя листа в начало таблицы
    IsPasteSheetName = (MsgBox("Вставлять имя листа первым столбцом?", vbQuestion + vbYesNo, "www.wxcel-vba.ru") = vbYes)
    On Error GoTo 0
    'Запрос - вставлять на результирующий лист все данные
    'или только значения ячеек (без формул и форматов)
    bPasteValues = (MsgBox("Вставлять только значения?", vbQuestion + vbYesNo, "www.wxcel-vba.ru") = vbYes)
    'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)
    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "www.wxcel-vba.ru") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
    If IsPasteSheetName Then
        lCol = lCol + 1
    End If
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlManual
    End With
    'создаем новый лист в книге для сбора
    Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
    'если нужно сделать сбор данных на новый лист книги с кодом
    'Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then
            Set wbAct = Workbooks.Open(Filename:=avFiles(li))
        Else
            Set wbAct = ThisWorkbook
        End If
        oAwb = wbAct.Name
        'цикл по листам
        For Each wsSh In wbAct.Sheets
            If wsSh.Name Like sSheetName Then
                'Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 'собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else 'собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'определяем для копирования диапазон только заполненных данных на листе
                    Set rCopy = Intersect(.Range(sCopyAddress).Parent.UsedRange, .Range(sCopyAddress))
                    'вставляем имя книги, с которой собраны данные
                    If lCol > 0 Then
                        If bPolyBooks Then
                            wsDataSheet.Cells(lLastRowMyBook, 1).Resize(rCopy.Rows.Count).Value = oAwb
                        End If
                        If IsPasteSheetName Then
                            wsDataSheet.Cells(lLastRowMyBook, lCol).Resize(rCopy.Rows.Count).Value = .Name
                        End If
                    End If
                    'если вставляем только значения
                    If bPasteValues Then
                        rCopy.Copy
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteFormats
                    Else 'если вставляем все данные ячеек(формулы, форматы и т.д.)
                        rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                    End If
                End With
            End If
NEXT_:
        Next wsSh
        If bPolyBooks Then
            wbAct.Close False
        End If
    Next li
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = lCalc
    End With
End Sub

Приведенный выше код необходимо вставить в стандартный модуль(Что такое модуль? Какие бывают модули?). Выполнить его можно будет из этой книги нажатием клавиш Alt+F8. В появившемся окне выбрать Consolidated_Range_of_Books_and_Sheets и нажать Выполнить. Так же можно создать на листе кнопку и назначить ей данный макрос. Так же, если впервые работаете с макросами настоятельно рекомендую прочитать статью: Что такое макрос и где его искать?, а так же Почему не работает макрос?

После вызова макроса поочередно будут появляется запросы, в которых надо будет указать исходные параметры:

  • Диапазон сбора данных — Если в окне выбора диапазона выбрать только одну ячейку, то данные будут собраны со всех листов книги/книг, начиная с этой ячейки и до последней ячейки листа.
    Если выбрать несколько ячеек, данные будут собраны только с указанного диапазона всех листов книги/книг. Допускается указать несвязанный(рваный) диапазон(например, только три столбца: A:A,D:D,F:F). Сделать это можно, выделив нужный диапазон с зажатой клавишей Ctrl. Здесь необходимо учитывать, что Excel позволяет одним махом скопировать не любые рваные диапазоны, а только диапазоны одного размера и только если они начинаются с одной строки. Например, если выделить диапазоны A1:B20, F1:H20 — они будут скопированы без проблем. Но если попробовать указать диапазоны со сдвигом: A1:B20, F2:H21 — Excel выдаст ошибку.
  • Имя листа — Необязателен для указания. Если не указан — данные будут собраны со всех листов. Указать можно как точное соответствие имени листа, так и с частичным соответствием. Например, если в книгах для сбора данных необходимо собрать данные только с листа «Январь», то следует так и указать — «Январь». Если требуется собрать данные только с листов, начинающихся с «Продажи»(«Продажи ЮГ», «Продажи НН», «Продажи Запад» и т.д.), то следует применить символ подстановки звездочку — «Продажи*». Если надо собрать с листов, содержащих в имени «продажи»(«Итоговые продажи ЮГ», «Продажи НН», «Сезонные продажи» и т.д.), то указываем «*продажи*». Если надо собрать только с листа «Сезонные продажи», но известно, что вместо пробела может быть нижнее подчеркивание или тире(«Сезонные продажи», «Сезонные_продажи», «Сезонные-продажи») или иной символ, то можно также применить звездочку — «Сезонные*продажи». Но если среди листов могут встречаться и такие как «Сезонные разовые продажи», «Сезонные корпоративные продажи» и т.п., но информацию с них собирать не надо, то можно применить вопросительный знак — «Сезонные?продажи». Вопросительный знак заменяет любой один символ, звездочка — любое количество любых символов.
  • Вставлять имя листа первым столбцом? — если выбрать Да, перед данными в итоговой таблице будут записаны имена листов, с которых были собраны данные. Если будет указано собирать данные с нескольких книг — то имя листа будет во втором столбце, если с листов одной книги — то имя листа будет первым столбцом.
  • Вставлять только значения? — если выбрать Да, то в результирующий лист с листов будут вставлены исключительно значения ячеек (без формул), но при этом сохранятся их форматы(формат чисел, цвет заливки, цвет шрифта, границы и т.п.). Может пригодится, если на листах для сбора записаны формулы, ссылающиеся на другие листы, книги, диапазоны. При обычном копировании может случиться так, что формула выдаст ошибку, т.к. в книге для вставки нет таких листов и диапазонов или данные расположены иначе. Если выбрать Нет, то все ячейки с листов на результирующий будут копироваться в точности как в исходных листах.
  • И последний запрос: Собрать данные с нескольких книг? — если выбрать Да, то появится диалоговое окно выбора файлов. Надо указать все файлы, данные с которых необходимо собрать. Если выбрать Нет, то данные будут собираться с листов только активной книги. При этом, если выбран вариант сбора с нескольких книг, то первым столбцом в итоговой таблице будут записаны имена файлов, с которых были собраны данные

Данные будут собраны на новый лист книги с макросом. Если данные собирались с нескольких книг, то в первый столбец будут занесены имена книг, с которых собраны данные.

Если после сбора данных обнаружили, что после каждого файла/листа много пустых строк, то следует найти в коде строку:

lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row

и заменить её на строку примерно следующего содержания:

lLastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

где 1 — это номер столбца на листах данных, в котором искать последнюю заполненную ячейку.
Актуально это для файлов с одинаковой структурой. Например, если сбор идет с листов по продажам, то вполне может быть такое, что в столбце 1 может не быть данных. Поэтому следует определить номер столбца, в котором наполнение данных максимально. Например, это может быть столбец с наименованиями товара или с суммами. Если это столбец D, то следует строку записать так:

lLastrow = .Cells(.Rows.Count, 4).End(xlUp).Row 'ищем последнюю строку в 4-м столбце

Подробнее про определение последней строки можно прочитать в статье: Как определить последнюю ячейку на листе через VBA?

Важное замечание: Если вы используете Excel 2007 и выше и файлы для сбора данных тоже в этом формате, то следует скачанный файл сначала сохранить в формат «Книга Excel с поддержкой макросов(.xlsm)», закрыть и открыть заново. Иначе есть шанс получить ошибку при сборе данных, т.к. Excel будет в режиме совместимости и не сможет поместить на результирующий лист более 65536 строк.

Скачать пример:

  Сбор данных с листов и книг.xls (73,0 KiB, 37 088 скачиваний)

Также см.:
Сбор данных с нескольких листов/книг
Как объединить несколько текстовых файлов в один?
Просмотреть все файлы в папке
План-фактный анализ в Excel при помощи Power Query


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

0 / 0 / 0

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

Сообщений: 3

1

Собрать данные из разных книг в одну

17.12.2015, 11:33. Показов 22915. Ответов 18


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

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

Результирующая таблица имеет такой же вид , как и рабоче книги.

Для примера прикрепляю 2 книги, в которых находятся таблицы.



0



0 / 0 / 0

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

Сообщений: 3

17.12.2015, 12:33

 [ТС]

2

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



0



5590 / 1580 / 406

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

Сообщений: 2,366

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

17.12.2015, 16:46

3

Подходящий вариант.



1



5590 / 1580 / 406

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

Сообщений: 2,366

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

17.12.2015, 16:55

4

Лучше проверку данных не копировать.



0



0 / 0 / 0

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

Сообщений: 3

17.12.2015, 18:14

 [ТС]

5

Благодарю, будем пробовать).

Добавлено через 48 минут
Работает замечательно! Огромное спасибо. Единственный вопрос, в какой строке предусматривается возможность прописать имя листа отличное от «Форма». Или задам вопрос по другому: как добавить еще один вариант с именем листа, откуда собираются данные?



0



KoGG

5590 / 1580 / 406

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

Сообщений: 2,366

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

18.12.2015, 09:30

6

Здесь можно добавлять имена листов сбора сразу в массив ImenaListovSbora через «,»

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
39
40
41
42
43
44
45
Option Compare Text
 
Sub Собрать_данные()
    ' Макрос собирает данные на активном листе активной книги из всех листов "Форма" xls файлов заданной директории,
    Dim ImenaListovSbora: ImenaListovSbora = Array("Форма", "Реестр")
    Const FirstRow_Cel& = 7          ' Номер строки начала построения
    Const FirstRow& = 7              ' Номер строки начала сбора данных (ниже шапки)
    Dim i&, LastRow&, LastRow_Cel&
    Dim ShCel As Worksheet, Sh As Worksheet, wb_Tek As Workbook
    Dim MyPath$, MyFileName$, MyFullName$
    Set ShCel = ActiveSheet
    LastRow_Cel = FirstRow_Cel
    With ShCel
        i = .UsedRange.Rows.Count + .UsedRange.Row - 1
        If i < FirstRow_Cel Then i = FirstRow_Cel
        .Rows(FirstRow_Cel & ":" & i).ClearContents
    End With
    MyPath = Trim$(ShCel.[C1])
    If Right$(MyPath, 1) <> "" Then MyPath = MyPath & ""
    MyFileName = Dir(MyPath & "*.xls*")
    Do Until MyFileName = ""
        MyFullName = MyPath & MyFileName
        Set wb_Tek = Workbooks.Open(Filename:=MyFullName, UpdateLinks:=0, ReadOnly:=True)
        For Each Sh In wb_Tek.Worksheets
            For i = 0 To UBound(ImenaListovSbora)
                If Sh.Name = ImenaListovSbora(i) Then
                    With Sh
                        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                        .Range(.Cells(FirstRow, 1), .Cells(LastRow, 8)).Copy
                        ShCel.Cells(LastRow_Cel, 1).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                        LastRow_Cel = LastRow_Cel + LastRow - FirstRow + 1
                    End With
                End If
            Next
        Next Sh
        wb_Tek.Close SaveChanges:=False
        MyFileName = Dir
    Loop
    With ShCel
        .Range(.Cells(LastRow_Cel - 1, 1), .Cells(LastRow_Cel - 1, 8)).Copy
        .Cells(LastRow_Cel, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
        .Cells(LastRow_Cel, 2).Select
    End With
End Sub



0



0 / 0 / 1

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

Сообщений: 50

23.03.2019, 21:52

7

Здравствуйте! Наткнулась на Ваш код — очень поможет в работе, спасибо!
Несколько вопросов:
1. как можно подправить код, чтобы вместо того чтобы в файле в строке писать путь, выдавало окно поиска папки?
2. как отключить мерцание экрана при поиске/проверке файлов? (когда файлов много — немного напрягает глаза)
3. как избежать появления окна примерно такого содержания «в буфере обмена много данных. сохранить их…?» если файлов много — замучаешься отвечать

Добавлено через 6 минут
KoGG, прошу прощения, сразу не поняла, как вставить ссылку на ник.



0



Schumacher57

12 / 11 / 3

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

Сообщений: 256

24.03.2019, 13:03

8

Лучший ответ Сообщение было отмечено Остап Бонд как решение

Решение

rinolga,
Ответ на 2ой вопрос:
Перед началом выполненения кода добавьте:

Visual Basic
1
Application.Screenupdating = false

Ответ на 3ий вопрос:
Так же, перед началом выполнения кода, поставте:

Visual Basic
1
Application.DisplayAlerts = false

Рекомендую в конце кода вернуть значения в положения true. Могут возникнуть неприятности, наподобие: закроете книгу отредактированную, она не сохранится и не задаст вопрос о сохранении по причине решения третьего вопроса.



1



rinolga

0 / 0 / 1

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

Сообщений: 50

24.03.2019, 15:06

9

Лучший ответ Сообщение было отмечено Остап Бонд как решение

Решение

Schumacher57, спасибо, помогло!
а 1й вопрос помогли решить так:

Visual Basic
1
2
3
4
5
6
With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "Выбрать папку с отчётами"
        .Title = "Папка"
        If .Show <> -1 Then Exit Sub
        MyPath = .SelectedItems.Item(1) & ""
    End With



0



12 / 11 / 3

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

Сообщений: 256

24.03.2019, 16:06

10

Лучший ответ Сообщение было отмечено Остап Бонд как решение

Решение

rinolga, Не за что
Да, это действующий вариант. Есть так же возможность, делать отображение только интересующих файлов, т.е. во время просмотра директории будут отображаться только текстовые файлы или файлы Word.
Не знаю, противоречит ли моё предложение правилам форума. В общем, могу оказать помощь пишите в ЛС или на почту (указана в профиле), подскажу, если смогу или будет время. Абсолютно бесплатно, сам изучаю VBA, будет интересно порешать похожие вопросы.
Не стесняйтесь.



0



0 / 0 / 1

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

Сообщений: 50

24.03.2019, 22:08

11

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

время просмотра директории будут отображаться только текстовые файлы или файлы Word.

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



0



0 / 0 / 0

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

Сообщений: 1

05.02.2020, 21:45

12

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



0



12 / 11 / 3

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

Сообщений: 256

20.08.2020, 11:52

13

Лена122,
Это, честно говоря, очень и очень общий вопрос. Правда, со стороны (кто чуть-чуть понимает в VBA), звучит примерно так:
«Я села за машину той же марки, а она не едет, в чём может быть проблема?»
Вот особенно по этой строчке:

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

правда у меня столбцов и строк в таблицах намного больше

Тут надо всё индивидуально смотреть (изменения в один символ в програмном коде, влечёт (хоть и работающий код) за собой с сотню всяких изменений.
По заливке, Cells.ClearFormat — может помочь…



0



passedbyz

Заблокирован

20.08.2020, 16:09

14

Мдя За полгода Лена решила уже свою проблему наверно?



0



12 / 11 / 3

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

Сообщений: 256

20.08.2020, 16:25

15

passedbyz сам не знаю, что на меня нашло)



1



0 / 0 / 0

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

Сообщений: 3

21.10.2020, 11:41

16

Доброго времени суток! Помогите, пожалуйста, с такой задачей. Необходимо собрать данные из разных книг (база с данными олимпиад), с одними и теми же столбцами, но разным количеством строк. Есть еще затруднение в том, что в книге несколько листов (много предметов). Возможен ли такой сбор информации? Буду рада, если сможете помочь! Для наглядности прикрепляю исходную таблицу



0



2630 / 1636 / 744

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

Сообщений: 5,141

21.10.2020, 12:45

17

AnastasiyaAR,
Прикрепите пару книг …



0



0 / 0 / 0

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

Сообщений: 3

21.10.2020, 15:22

18

Здравствуйте! Вот для примера 2 школы, три предмета. Объединить надо по предметам в один лист. Например, Химия и там обе школы. Благодарю!



0



0 / 0 / 0

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

Сообщений: 3

21.10.2020, 15:27

19

Здравствуйте! Вот для примера прикрепляю архив — 2 школы, три предмета. Объединить надо по предметам в один лист. Например, Химия и там обе школы. Благодарю!



0



Как быстро объединить несколько файлов Excel

Мы рассмотрим три способа объединения файлов Excel в один: путем копирования листов, запуска макроса VBA и использования инструмента «Копировать рабочие листы» из надстройки Ultimate Suite.

обработать данные в файле намного проще, чем переключаться между книгами. Однако объединение нескольких книг Excel в один файл может быть сложным и трудоемким процессом, особенно если книги, которые необходимо объединить, содержат много листов. Так как же решить эту проблему? Будете ли вы копировать их вручную или с помощью кода VBA? Или вы используете один из специализированных инструментов для объединения файлов Excel? 

Ниже вы найдете несколько хороших способов реализовать слияние.

  • Самый простой — скопировать вручную.
  • Комбинируйте файлы Excel с VBA.
  • Как объединить несколько файлов с Ultimate Suite.

Примечание. В этой статье мы расскажем, как скопировать листы из нескольких книг Excel в одну книгу. Если вы ищете быстрый способ скопировать данные с нескольких листов на общий лист, вы найдете подробные инструкции в другой статье: Как объединить несколько листов в один.

Простой метод — копировать листы руками.

Если вам просто нужно объединить пару файлов Excel, вы можете вручную скопировать или переместить листы из одного файла в другой. Вот как это сделать:

  1. Откройте книги, которые мы планируем объединить.
  2. Выберите листы в исходной книге, которые вы хотите скопировать в основную книгу.

Чтобы выбрать несколько листов, используйте один из следующих приемов:

  • Чтобы выбрать соседние листы, щелкните вкладку первого листа, который вы хотите скопировать, удерживайте нажатой клавишу Shift, затем щелкните вкладку последнего. Это действие выберет все листы между ними.
  • Чтобы выбрать несмежные, удерживайте клавишу Ctrl и щелкайте по каждой вкладке по отдельности.
  • Выделив все листы, щелкните правой кнопкой мыши одну из выделенных вкладок и выберите «Переместить или скопировать…» .

  1. В диалоговом окне «Перемещение или копирование» выполните следующие действия:
    • В раскрывающемся списке «Переместить выбранные листы в книгу» выберите целевую книгу, в которой вы хотите объединить другие файлы.
    • Укажите, где именно должны быть вставлены карты. В нашем случае мы выбираем вариант, который будет включен в конец списка.
    • Установите флажок «Создать копию», если вы хотите, чтобы исходные данные остались в исходном файле.
    • Щелкните ОК, чтобы завершить операцию.

Чтобы объединить вкладки из нескольких файлов Excel, повторите описанные выше шаги для каждой книги отдельно.

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

Как объединить файлы Excel с VBA

Если у вас есть несколько файлов Excel, которые необходимо объединить в один файл, более быстрый способ — автоматизировать процесс с помощью макроса VBA.

Ниже вы найдете код VBA, который копирует все листы из всех выбранных файлов Excel в книгу. Этот макрос MergeExcelFiles написан Алексом.

Важная заметка! Макрос работает со следующим ограничением: объединяемые файлы не должны быть открыты физически или в памяти, в буфере обмена. В этом случае вы получите ошибку во время выполнения.

Sub MergeExcelFiles () Dim fnameList, fnameCurFile As Variant Dim countFiles, countSheets As Integer Dim wksCurSheet как рабочий лист Dim wbkCurBook, wbkSrcBook как рабочая книга fnameList = Application.GetOpenFilename (FileFilter: = «Microsoft xls», xls); Файлы Excel для объединения «, MultiSelect: = True) If (vbBoolean VarType (fnameList)) Then If (UBound (fnameList)> 0) Then countFiles = 0 countSheets = 0 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set wbkCurBook = ActiveWorkbook для каждого fnameCurFile в fnameList countFiles = countFiles + 1 Set wbkSrcBook = Workbooks.Open (Имя файла: = f ForCurBookS .Sheets countSheets = countFogli.Sheets (wbk.CurBook) NextSheets SaveChaets: = False Next Applicationculation =ScreenUp Application. = xlCalculationBFutomatic & Msgcessed files «& v bCrLf &» Merged «& countSheets &» worksheets «, Title: =» Merge Excel file «End If Else MsgBox» None n selected file «, Title: =» Объединить файл Excel «End If End Sub

Как добавить этот макрос в книгу

Если вы хотите вставить макрос в свою книгу, выполните следующие обычные действия:

  1. нажмите Alt + F11, чтобы открыть редактор Visual Basic.
  2. Щелкните правой кнопкой мыши ThisWorkbook на левой панели и выберите в контекстном меню «Вставка»> «Форма.
  3. В появившемся окне (Окно кода) вставьте указанный выше код.

Более подробные инструкции см. В разделе Как вставить и запустить код VBA в Excel .

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

Как использовать макрос MergeExcelFiles

Откройте файл Excel, в котором вы хотите объединить листы из других книг, и выполните следующие действия:

  1. Нажмите Alt + F8, чтобы открыть диалоговое окно.
  2. В разделе «Имя макроса» выберите MergeExcelFiles и нажмите «Выполнить».

  1. Откроется стандартное окно проводника, выберите одну или несколько книг, которые вы хотите объединить, и нажмите «Открыть». Чтобы выбрать несколько файлов, удерживайте клавишу Ctrl при вводе их имен.

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

Как объединить несколько файлов с помощью Ultimate Suite.

Если вам не очень нравится VBA и вы ищете более простой и быстрый способ объединить файлы Excel, воспользуйтесь инструментом Копирование листов, одной из более чем 60 функций, включенных в потрясающий Ultimate Suite for Excel. Работает в версиях Excel 2010-2019.

С Ultimate Suite объединить несколько файлов Excel в один так же просто, как один-два-три (буквально 3 быстрых шага). Вам даже не нужно открывать те, которые хотите объединить. И это может быть два и более файла, неважно.

  1. Открыв главную бухгалтерскую книгу, перейдите на вкладку «Данные» в Ablebits и нажмите Копировать листы> Выбранные листы в книге)».

  1. В диалоговом окне выберите файлы (а в них — листы), которые хотите объединить, и нажмите «Далее)» .

Совет:

  • Чтобы выбрать все листы в определенной книге, просто установите флажок рядом с названием книги, и все они в этом файле будут выбраны автоматически.
  • Чтобы объединить закрытые книжные листы, нажмите кнопку «Добавить файлы…» и выберите все нужные книги. Это только добавит выбранные файлы в окно копирования, но не откроет их в Excel.
  • По умолчанию все данные копируются. Однако на разных листах вы можете выбрать разные диапазоны для объединения. Чтобы скопировать только определенную область, наведите указатель мыши на название вкладки, затем щелкните значок и выберите нужный диапазон. 
  • При необходимости укажите один или несколько дополнительных параметров и нажмите «Копировать». На следующем снимке экрана показаны настройки по умолчанию: Вставить все (формулы и значения) и Сохранить форматирование.

Дайте мастеру копирования несколько секунд на обработку и наслаждайтесь результатом!

Эта страница содержит подробное описание всех функций мастера копирования.

Чтобы ближе познакомиться с этим и другими инструментами Excel, вы можете загрузить пробную версию Ultimate Suite.

Итак, я надеюсь, что у вас есть ответ на свой вопрос: как быстро объединить несколько файлов Excel в один.

Like this post? Please share to your friends:
  • Vba не могу открыть книгу excel
  • Vba не заменяет текст в word
  • Vba не видит word
  • Vba надстройка для word
  • Vba надстройка для excel скачать