Объединить таблицы с нескольких листов на один лист

Объединить таблицы с нескольких листов на один лист

У меня есть документ Excel с более чем 30 листами. У всех одинаковая структура: простая таблица с одинаковыми столбцами, заголовками/общей строкой, но разным количеством строк (ни одна не имеет более 500 строк).

Я хочу объединить их в главную таблицу. Операция только один раз.

Вручную я мог бы скопировать 30 таблиц одну за другой на новый рабочий лист. Закончив, я бы сделал сортировку и удалил все пустые/заголовочные/итоговые строки. Мне все равно на форматирование. Думаю, это заняло бы у меня около 15-20 минут, но всегда есть риск, что я сделаю ошибку и пропущу лист или что-то еще.

VBA звучит так, будто это займет слишком много времени. Прямо сейчас я почти думаю импортировать книгу в SQL Server, объединить их и скопировать-вставить результат обратно в Excel.

Есть ли у вас какие-нибудь хорошие трюки?

решение1

Если это то, что вам нужно делать часто, то я рекомендую написать быструю процедуру VBA. Если это одноразовое действие, то я бы просто сделал это вручную. Чтобы убедиться, что вы случайно не пропустите таблицу, используйте вырезать-вставить вместо копировать-вставить.

Вот как я бы это сделал. Это происходит довольно быстро с помощью сочетаний клавиш.

  • Откройте исходную книгу в Excel как доступную только для чтения, чтобы предотвратить случайную потерю данных.
  • Откройте новую рабочую книгу для хранения новой основной таблицы.
  • Закройте все остальные рабочие книги, чтобы было легче переключаться между ними, с которыми вы работаете.
  • Выберите первый лист в исходной книге, который вы хотите скопировать.

Теперь вы можете начать использовать сочетания клавиш.

  1. Ctrl + Homeдля перехода в верхний левый угол таблицы. (Это приведет к переходу в ячейку A1, если нет закрепленных строк или столбцов.)
  2. Shift + Ctrl + Endчтобы выделить все слева и ниже текущей выделенной ячейки.
  3. Ctrl + Xдля вырезания данных.
  4. Ctrl + Tabдля перехода к новой рабочей книге.
  5. Еще раз проверьте, что вы находитесь в правильном месте, и нажмите , Enterчтобы вставить данные.
  6. Ctrl + Endдля перехода к последней вставленной ячейке.
  7. Down Arrowдля перехода к следующей неиспользованной строке.
  8. Ctrl + Left Arrowчтобы вернуться к столбцу А.
  9. Ctrl + Tabчтобы вернуться к исходной рабочей книге.
  10. Ctrl + Page Downдля выбора следующего рабочего листа.
  11. Вернитесь к шагу 1 и повторяйте до завершения.

Закончив работу, вы можете Ctrl + Page Upвернуться ко всем исходным рабочим листам и убедиться, что все данные были удалены.

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

Если вы случайно пропустили шаг или вставили поверх существующих данных, нажмите , Ctrl + Zчтобы отменить действие.

Я только что провел тест, следуя вышеприведенным шагам. В рабочей книге, которую я использовал, было 10 рабочих листов по 120 строк данных на каждом. Мне потребовалось 1 ½ минуты, чтобы создать главную таблицу. Если вы не знакомы с сочетаниями клавиш, это может занять у вас в два раза больше времени. Для 30 рабочих листов, я думаю, это может занять у вас 10 минут.

решение2

У меня та же проблема, нашел классный макрос здесь: http://excel.tips.net/T003005_Condensing_Multiple_Worksheets_Into_One.html

Sub Combine()
    Dim J As Integer

    On Error Resume Next
    Sheets(1).Select
    Worksheets.Add ' add a sheet in first place
    Sheets(1).Name = "Combined"

    ' copy headings
    Sheets(2).Activate
    Range("A1").EntireRow.Select
    Selection.Copy Destination:=Sheets(1).Range("A1")

    ' work through sheets
    For J = 2 To Sheets.Count ' from sheet 2 to last sheet
        Sheets(J).Activate ' make the sheet active
        Range("A1").Select
        Selection.CurrentRegion.Select ' select all cells in this sheets

        ' select all lines except title
        Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select

        ' copy cells selected in the new sheet on last line
        Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
    Next
End Sub

Просто скопируйте и вставьте макрос, запустите его и готово!

Связанный контент