1

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

Я хочу объединить их в мастер-таблицу. Только однократная операция.

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

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

У тебя есть хорошие трюки?

2 ответа2

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 минут.

1

Я добавляю ту же проблему, нашел удивительный макрос здесь: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

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

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