Мне нужно иметь возможность извлекать данные из 6 отдельных книг Excel, которые все отформатированы одинаково, первая строка - это один и тот же заголовок для всех шести, а затем строка начала данных, идущая вниз, форматируется одинаково для всех 6.

Мы в основном используем это для небольших почтовых рассылок на работе, и такие сотрудники вставляют адреса с именами в "почтовую" книгу Excel, всегда на первом листе, всегда начиная со 2-й строки.

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

Как бы я автоматизировал вырезание почтовых меток (в основном, данных, записанных слева направо через пару столбцов) и вставку их в мастер-лист Excel? (данные должны быть удалены из 6 рабочих книг).

Я перепробовал всю справочную информацию, которую смог найти, и много искал, но просто не могу разобраться.

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

Благодарю. (Office 2007 или 2013 инструкции будут в порядке.)

3 ответа3

0

Зависит от того, насколько строгие правила / насколько компетентны ваши коллеги, решения отличаются от:

  • общая рабочая книга: все понимают все и доверяют данным.
  • разделить базу данных: каждый получает форму ввода, и вы все работаете из одного набора данных; им не доверяют данные, но все они достаточно компетентны, чтобы использовать их с комфортом
  • отдельные базы данных: макрос запускает запрос на добавление из всех наборов диаспорных данных в основную таблицу, а затем выполняет запрос на удаление в основной
  • Файл Excel, открывающий подчиненные (в цикличном порядке), копирующий данные, затем удаляющий, затем сохраняющий при закрытии.
    Сколько у тебя свободного времени?
0

Откройте новую рабочую книгу, нажмите ALT+F11.

Добавьте новый модуль и вставьте следующий код VBA:

Sub mergexlfiles()
Dim actwb As Workbook

Dim LastRow As Long
Dim DestRow As Long

Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Application.ScreenUpdating = False
Set mergeObj = CreateObject("Scripting.FileSystemObject")

Set dirObj = mergeObj.Getfolder("C:\folder\") 'update folder path
Set filesObj = dirObj.Files
For Each everyObj In filesObj
Set actwb = Workbooks.Open(everyObj)

LastRow = actwb.Worksheets(1).Cells.Find(What:="*", _
             After:=actwb.Worksheets(1).Cells.Range("A1"), _
             SearchDirection:=xlPrevious, _
             LookIn:=xlFormulas, _
             SearchOrder:=xlByRows).Row

Range("A2:S" & LastRow).Copy 'amend "S" to last column letter in source files

ThisWorkbook.Worksheets(1).Activate

Range("A" & ThisWorkbook.Worksheets(1).UsedRange.Rows.Count).Offset(1, 0).Value = actwb.Name
Range("B" & ThisWorkbook.Worksheets(1).UsedRange.Rows.Count).Offset(1, 0).PasteSpecial

Application.CutCopyMode = False
actwb.Close
Next
End Sub

Обязательно обновите закомментированные разделы и запустите макрос.

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

Когда экран обновится, у вас будет один лист Excel со всем содержимым вместе.

Надеюсь, это поможет.

(Я адаптировал некоторые VBA, которые я нашел в другом месте, извинения я не уверен в оригинальном источнике.)

0

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

Подключите данные из другой книги к своей книге

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .