У меня есть документ Excel с более чем 30 листами. У всех одинаковая структура: простая таблица с одинаковыми столбцами, заголовками/общей строкой, но разным количеством строк (ни одна не имеет более 500 строк).
Я хочу объединить их в главную таблицу. Операция только один раз.
Вручную я мог бы скопировать 30 таблиц одну за другой на новый рабочий лист. Закончив, я бы сделал сортировку и удалил все пустые/заголовочные/итоговые строки. Мне все равно на форматирование. Думаю, это заняло бы у меня около 15-20 минут, но всегда есть риск, что я сделаю ошибку и пропущу лист или что-то еще.
VBA звучит так, будто это займет слишком много времени. Прямо сейчас я почти думаю импортировать книгу в SQL Server, объединить их и скопировать-вставить результат обратно в Excel.
Есть ли у вас какие-нибудь хорошие трюки?
решение1
Если это то, что вам нужно делать часто, то я рекомендую написать быструю процедуру VBA. Если это одноразовое действие, то я бы просто сделал это вручную. Чтобы убедиться, что вы случайно не пропустите таблицу, используйте вырезать-вставить вместо копировать-вставить.
Вот как я бы это сделал. Это происходит довольно быстро с помощью сочетаний клавиш.
- Откройте исходную книгу в Excel как доступную только для чтения, чтобы предотвратить случайную потерю данных.
- Откройте новую рабочую книгу для хранения новой основной таблицы.
- Закройте все остальные рабочие книги, чтобы было легче переключаться между ними, с которыми вы работаете.
- Выберите первый лист в исходной книге, который вы хотите скопировать.
Теперь вы можете начать использовать сочетания клавиш.
Ctrl + Home
для перехода в верхний левый угол таблицы. (Это приведет к переходу в ячейку A1, если нет закрепленных строк или столбцов.)Shift + Ctrl + End
чтобы выделить все слева и ниже текущей выделенной ячейки.Ctrl + X
для вырезания данных.Ctrl + Tab
для перехода к новой рабочей книге.- Еще раз проверьте, что вы находитесь в правильном месте, и нажмите ,
Enter
чтобы вставить данные. Ctrl + End
для перехода к последней вставленной ячейке.Down Arrow
для перехода к следующей неиспользованной строке.Ctrl + Left Arrow
чтобы вернуться к столбцу А.Ctrl + Tab
чтобы вернуться к исходной рабочей книге.Ctrl + Page Down
для выбора следующего рабочего листа.- Вернитесь к шагу 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
Просто скопируйте и вставьте макрос, запустите его и готово!