Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Соединение нескольких книг в одну - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Соединение нескольких книг в одну (Макросы/Sub)
Соединение нескольких книг в одну
ZamoK Дата: Вторник, 07.10.2014, 16:06 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Добрый день!
Хотел сводную таблицу , но не получилось т.к. книг много, подсказали что без макроса тут никак, ну а в мактосах непонимаю вааще ничего.
Отчеты приходят каждый день. Для формирования разнорядки нужен лист "сбор" именно в таком виде. Много искал но похожего ничего не нашел. Помогите собрать данные со всех книг в одну.
К сообщению приложен файл: 01.10.2014--.xls (29.0 Kb) · 4877696.xls (29.0 Kb)


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 07.10.2014, 16:12
 
Ответить
СообщениеДобрый день!
Хотел сводную таблицу , но не получилось т.к. книг много, подсказали что без макроса тут никак, ну а в мактосах непонимаю вааще ничего.
Отчеты приходят каждый день. Для формирования разнорядки нужен лист "сбор" именно в таком виде. Много искал но похожего ничего не нашел. Помогите собрать данные со всех книг в одну.

Автор - ZamoK
Дата добавления - 07.10.2014 в 16:06
ZamoK Дата: Вторник, 07.10.2014, 16:09 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Имена файлов, а то что-то он меняет наверное
1/ 01.10.2014-Слад-Омск
2/ 01.10.2014-Слад-Пермь
3/ 01.10.2014-Слад-Уфа
4/ Свод
К сообщению приложен файл: 1463327.xls (29.0 Kb) · 4761481.xls (27.5 Kb)


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Вторник, 07.10.2014, 16:11
 
Ответить
СообщениеИмена файлов, а то что-то он меняет наверное
1/ 01.10.2014-Слад-Омск
2/ 01.10.2014-Слад-Пермь
3/ 01.10.2014-Слад-Уфа
4/ Свод

Автор - ZamoK
Дата добавления - 07.10.2014 в 16:09
ZamoK Дата: Среда, 08.10.2014, 01:15 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Нашел такой макрос - но он ничего не собирает - что не так?
[vba]
Код
Sub Кнопка8_Щелчок()
     Dim iPivotRange As Range, iDestinationRange As Range, iBeginRange As Range, Sheet
     Dim iRngAddress As String, oAwb As String, DataSheet As String, _
         iCopyAddress As String, sSheetName As String, oFile
     Dim lLastrow As Long, lLastRowMyBook As Long
     Dim iLastColumn As Integer
     Dim Str() As String

     ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
     DataSheet = ThisWorkbook.ActiveSheet.Name
     On Error Resume Next
     Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                    "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                    vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
     If iBeginRange Is Nothing Then Exit Sub
     sSheetName = "Лист3"
     If sSheetName = "" Then sSheetName = "*"
     On Error GoTo 0
     With Application.FileDialog(msoFileDialogFilePicker)
         .AllowMultiSelect = True
         .InitialFileName = "*.*"
         .Title = "Выберите файлы"
         If .Show = False Then Exit Sub
         For Each oFile In .SelectedItems
             Workbooks.OpenText Filename:=oFile
             oAwb = Dir(oFile, vbDirectory)

             Application.ScreenUpdating = False
             Workbooks(oAwb).Activate
             For Each Sheet In Sheets
                 If Sheet.Name Like sSheetName Then
                     Sheet.Activate
                     Select Case iBeginRange.Count
                     Case 1
                         lLastrow = Cells(1, 1).SpecialCells(xlLastCell).Row
                         iLastColumn = Cells.SpecialCells(xlLastCell).Column
                         iCopyAddress = Range(Cells(iBeginRange.Row, iBeginRange.Column), Cells(lLastrow, iLastColumn)).Address
                     Case Else
                         iCopyAddress = iBeginRange.Address
                         lLastrow = iBeginRange.Rows.Count
                         iLastColumn = iBeginRange.Columns.Count
                     End Select
                     lLastRowMyBook = ThisWorkbook.Sheets(DataSheet).Cells.SpecialCells(xlLastCell).Row + 1
                     iRngAddress = Range(Cells(lLastRowMyBook, 1), Cells(lLastRowMyBook + lLastrow, iLastColumn)).Address
                     Sheet.Range(iCopyAddress).Copy Destination:=ThisWorkbook.Sheets(DataSheet).Range(iRngAddress)
                 End If
             Next Sheet
             Workbooks(oAwb).Close False
         Next oFile
     End With
     Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 6132245.xls (57.0 Kb)


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеНашел такой макрос - но он ничего не собирает - что не так?
[vba]
Код
Sub Кнопка8_Щелчок()
     Dim iPivotRange As Range, iDestinationRange As Range, iBeginRange As Range, Sheet
     Dim iRngAddress As String, oAwb As String, DataSheet As String, _
         iCopyAddress As String, sSheetName As String, oFile
     Dim lLastrow As Long, lLastRowMyBook As Long
     Dim iLastColumn As Integer
     Dim Str() As String

     ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
     DataSheet = ThisWorkbook.ActiveSheet.Name
     On Error Resume Next
     Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                    "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                    vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
     If iBeginRange Is Nothing Then Exit Sub
     sSheetName = "Лист3"
     If sSheetName = "" Then sSheetName = "*"
     On Error GoTo 0
     With Application.FileDialog(msoFileDialogFilePicker)
         .AllowMultiSelect = True
         .InitialFileName = "*.*"
         .Title = "Выберите файлы"
         If .Show = False Then Exit Sub
         For Each oFile In .SelectedItems
             Workbooks.OpenText Filename:=oFile
             oAwb = Dir(oFile, vbDirectory)

             Application.ScreenUpdating = False
             Workbooks(oAwb).Activate
             For Each Sheet In Sheets
                 If Sheet.Name Like sSheetName Then
                     Sheet.Activate
                     Select Case iBeginRange.Count
                     Case 1
                         lLastrow = Cells(1, 1).SpecialCells(xlLastCell).Row
                         iLastColumn = Cells.SpecialCells(xlLastCell).Column
                         iCopyAddress = Range(Cells(iBeginRange.Row, iBeginRange.Column), Cells(lLastrow, iLastColumn)).Address
                     Case Else
                         iCopyAddress = iBeginRange.Address
                         lLastrow = iBeginRange.Rows.Count
                         iLastColumn = iBeginRange.Columns.Count
                     End Select
                     lLastRowMyBook = ThisWorkbook.Sheets(DataSheet).Cells.SpecialCells(xlLastCell).Row + 1
                     iRngAddress = Range(Cells(lLastRowMyBook, 1), Cells(lLastRowMyBook + lLastrow, iLastColumn)).Address
                     Sheet.Range(iCopyAddress).Copy Destination:=ThisWorkbook.Sheets(DataSheet).Range(iRngAddress)
                 End If
             Next Sheet
             Workbooks(oAwb).Close False
         Next oFile
     End With
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - ZamoK
Дата добавления - 08.10.2014 в 01:15
ZamoK Дата: Среда, 08.10.2014, 09:05 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Тут есть кто? АУууу


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеТут есть кто? АУууу

Автор - ZamoK
Дата добавления - 08.10.2014 в 09:05
wild_pig Дата: Среда, 08.10.2014, 10:58 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Приветствую! Пробуем.
К сообщению приложен файл: 8864186.rar (37.4 Kb)
 
Ответить
СообщениеПриветствую! Пробуем.

Автор - wild_pig
Дата добавления - 08.10.2014 в 10:58
ZamoK Дата: Среда, 08.10.2014, 14:12 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

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


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеРаботает отлично, но вот маленькая неувязочка в окне файлы выбирать приходится по одному а их несколько десятков, можно ли както доработать чтоб сразу все выделить, ну кроме того в котором работаю

Автор - ZamoK
Дата добавления - 08.10.2014 в 14:12
The_Prist Дата: Среда, 08.10.2014, 16:26 | Сообщение № 7
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
Выбирать, зажав Shift или Ctrl
Выбрать все - Ctrl+A


Errare humanum est, stultum est in errore perseverare

Сообщение отредактировал The_Prist - Среда, 08.10.2014, 16:27
 
Ответить
СообщениеВыбирать, зажав Shift или Ctrl
Выбрать все - Ctrl+A

Автор - The_Prist
Дата добавления - 08.10.2014 в 16:26
ZamoK Дата: Среда, 08.10.2014, 19:27 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
The_Prist,
Не , в том окне которое отрывается для выбора файлов такая муля не прокатила, надо что-то похитрее :)


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеThe_Prist,
Не , в том окне которое отрывается для выбора файлов такая муля не прокатила, надо что-то похитрее :)

Автор - ZamoK
Дата добавления - 08.10.2014 в 19:27
The_Prist Дата: Среда, 08.10.2014, 20:36 | Сообщение № 9
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
А-а-а...Я думал код в этой части не меняли. Замените:
[vba]
Код
.AllowMultiSelect = False
[/vba]
на
[vba]
Код
.AllowMultiSelect = True
[/vba]


Errare humanum est, stultum est in errore perseverare
 
Ответить
СообщениеА-а-а...Я думал код в этой части не меняли. Замените:
[vba]
Код
.AllowMultiSelect = False
[/vba]
на
[vba]
Код
.AllowMultiSelect = True
[/vba]

Автор - The_Prist
Дата добавления - 08.10.2014 в 20:36
wild_pig Дата: Среда, 08.10.2014, 22:47 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
У Дмитрия на сайте есть код по перебору файлов в папке, немного подшаманите и будет гуд :)
 
Ответить
СообщениеУ Дмитрия на сайте есть код по перебору файлов в папке, немного подшаманите и будет гуд :)

Автор - wild_pig
Дата добавления - 08.10.2014 в 22:47
ZamoK Дата: Четверг, 09.10.2014, 08:45 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Замените:
.AllowMultiSelect = False
на
.AllowMultiSelect = True

Да выделяет все файлы но обрабатывает только один :(
У Дмитрия на сайте есть код по перебору файлов в папке, немного подшаманите и будет гуд

Я же говорю
ну а в мактосах непонимаю вааще ничего.

Я только начинаю что-то соображать, логически понимаю что тут нехватает какого-то "переборщика"
Пытаюсь понять что тут что? уже кипю шипю и пузурюся
[spoiler][vba]
Код

Sub push_me_hard()
      Dim fPath$
      Dim spPath, spName
      Dim a()
      Dim i&
      With Application.FileDialog(msoFileDialogFilePicker)
          .Filters.Clear
          .Filters.Add "Microsoft Excel files", "*.xls"
          .AllowMultiSelect = True
          .InitialFileName = ThisWorkbook.Path
          If .Show = 0 Then Exit Sub
          fPath = .SelectedItems(1)
      End With
      spPath = Split(Replace(fPath, ".xls", ""), "\")         'отрезали от имени лишнее
      spName = Split(spPath(UBound(spPath)), "-")             'обозначили разделитель
      Application.ScreenUpdating = False
      Workbooks.Open fPath                    'открыли выбранную книгу
      With ActiveWorkbook                    'назначили книгу активной
          With .ActiveSheet                    'назначили лист активным
              a = .Range("A2:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value 'скопировали в буфер диапазон
          End With
          .Close False                    'закрыли книгу
      End With
      With Sheets("Сбор")                    'начинается цикл заполнения данными
          lr = .Cells(Rows.Count, 1).End(xlUp).Row + 1
          For i = 1 To UBound(a)
              If a(i, 1) <> "" Then
                  .Cells(lr, 1) = spName(0)
                  .Cells(lr, 2) = spName(2)
                  .Cells(lr, 3) = a(i, 1)
                  .Cells(lr, 4) = a(i, 3)
                  .Cells(lr, 5) = a(i, 4)
                  lr = lr + 1
              End If
          Next
      End With 'а наверно тут надо добавить циклический перебор выделенных файлов
      Application.ScreenUpdating = True
      Beep
End Sub
[/vba]


Я не Гуру, но стремлюсь!

Сообщение отредактировал ZamoK - Четверг, 09.10.2014, 08:47
 
Ответить
Сообщение
Замените:
.AllowMultiSelect = False
на
.AllowMultiSelect = True

Да выделяет все файлы но обрабатывает только один :(
У Дмитрия на сайте есть код по перебору файлов в папке, немного подшаманите и будет гуд

Я же говорю
ну а в мактосах непонимаю вааще ничего.

Я только начинаю что-то соображать, логически понимаю что тут нехватает какого-то "переборщика"
Пытаюсь понять что тут что? уже кипю шипю и пузурюся
[spoiler][vba]
Код

Sub push_me_hard()
      Dim fPath$
      Dim spPath, spName
      Dim a()
      Dim i&
      With Application.FileDialog(msoFileDialogFilePicker)
          .Filters.Clear
          .Filters.Add "Microsoft Excel files", "*.xls"
          .AllowMultiSelect = True
          .InitialFileName = ThisWorkbook.Path
          If .Show = 0 Then Exit Sub
          fPath = .SelectedItems(1)
      End With
      spPath = Split(Replace(fPath, ".xls", ""), "\")         'отрезали от имени лишнее
      spName = Split(spPath(UBound(spPath)), "-")             'обозначили разделитель
      Application.ScreenUpdating = False
      Workbooks.Open fPath                    'открыли выбранную книгу
      With ActiveWorkbook                    'назначили книгу активной
          With .ActiveSheet                    'назначили лист активным
              a = .Range("A2:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value 'скопировали в буфер диапазон
          End With
          .Close False                    'закрыли книгу
      End With
      With Sheets("Сбор")                    'начинается цикл заполнения данными
          lr = .Cells(Rows.Count, 1).End(xlUp).Row + 1
          For i = 1 To UBound(a)
              If a(i, 1) <> "" Then
                  .Cells(lr, 1) = spName(0)
                  .Cells(lr, 2) = spName(2)
                  .Cells(lr, 3) = a(i, 1)
                  .Cells(lr, 4) = a(i, 3)
                  .Cells(lr, 5) = a(i, 4)
                  lr = lr + 1
              End If
          Next
      End With 'а наверно тут надо добавить циклический перебор выделенных файлов
      Application.ScreenUpdating = True
      Beep
End Sub
[/vba]

Автор - ZamoK
Дата добавления - 09.10.2014 в 08:45
UltrasRW Дата: Четверг, 09.10.2014, 10:27 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 5 ±
Замечаний: 0% ±

счеты деревянные
ZamoK, держите
К сообщению приложен файл: 4678682.7z (19.8 Kb)


Сообщение отредактировал UltrasRW - Четверг, 09.10.2014, 10:31
 
Ответить
СообщениеZamoK, держите

Автор - UltrasRW
Дата добавления - 09.10.2014 в 10:27
ZamoK Дата: Четверг, 09.10.2014, 11:56 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
UltrasRW, неожиданное решение вопроса - спасибо, но Вы конечно понимаете что эти таблицы условные и я не учел формата


Поле наименование может содержать такого рода запись, после сбора точка меняется на запятую, как это исправить?


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеUltrasRW, неожиданное решение вопроса - спасибо, но Вы конечно понимаете что эти таблицы условные и я не учел формата


Поле наименование может содержать такого рода запись, после сбора точка меняется на запятую, как это исправить?

Автор - ZamoK
Дата добавления - 09.10.2014 в 11:56
UltrasRW Дата: Четверг, 09.10.2014, 12:54 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 5 ±
Замечаний: 0% ±

счеты деревянные
ZamoK, в файле свод столбцу С (Наименование) установите текстовый формат и прогоните сбор
 
Ответить
СообщениеZamoK, в файле свод столбцу С (Наименование) установите текстовый формат и прогоните сбор

Автор - UltrasRW
Дата добавления - 09.10.2014 в 12:54
ZamoK Дата: Четверг, 09.10.2014, 15:55 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
UltrasRW, Спасибо помогло.


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеUltrasRW, Спасибо помогло.

Автор - ZamoK
Дата добавления - 09.10.2014 в 15:55
ZamoK Дата: Четверг, 09.10.2014, 15:57 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
UltrasRW,
А вот бывают случаи когда нужно из папки не все , а к примеру за неделю или за несколько дней собрать как быть?


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеUltrasRW,
А вот бывают случаи когда нужно из папки не все , а к примеру за неделю или за несколько дней собрать как быть?

Автор - ZamoK
Дата добавления - 09.10.2014 в 15:57
ZamoK Дата: Четверг, 09.10.2014, 16:30 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Да ещё бы сортировку по столбцу А в собраном листе и думаю тему можно закрывать


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеДа ещё бы сортировку по столбцу А в собраном листе и думаю тему можно закрывать

Автор - ZamoK
Дата добавления - 09.10.2014 в 16:30
UltrasRW Дата: Четверг, 09.10.2014, 16:45 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 5 ±
Замечаний: 0% ±

счеты деревянные
ZamoK, тогда через окно выбора файлов - выбираем необходимые файлы и обрабатываем их =)
К сообщению приложен файл: _1.xls (47.0 Kb)
 
Ответить
СообщениеZamoK, тогда через окно выбора файлов - выбираем необходимые файлы и обрабатываем их =)

Автор - UltrasRW
Дата добавления - 09.10.2014 в 16:45
ZamoK Дата: Пятница, 10.10.2014, 21:15 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 268
Репутация: 4 ±
Замечаний: 0% ±

Excel 2003-2016
Огромное спасибо всем кто принял участие в решении данного вопроса, можно считать тему закрытой. hands


Я не Гуру, но стремлюсь!
 
Ответить
СообщениеОгромное спасибо всем кто принял участие в решении данного вопроса, можно считать тему закрытой. hands

Автор - ZamoK
Дата добавления - 10.10.2014 в 21:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Соединение нескольких книг в одну (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!