
У меня есть книга Excel с несколькими рабочими листами. У всех них одинаковые названия столбцов. Однако количество строк различается от листа к листу. Я хочу создать обзорный лист, где я могу видеть все данные с каждого листа. Я мог бы зайти на каждый лист и просто скопировать и вставить данные из второй строки в последнюю строку с данными на каждом листе. Но я думаю, что есть более простой способ сделать это?
Спасибо за вашу помощь!
решение1
Это решение с использованием VBA:
Public Sub overview()
resultsheet = "Overview"
Dim wkb As Workbook
Dim wks, wks1 As Worksheet
Set wkb = ThisWorkbook
On Error GoTo SheetError:
Set wks1 = wkb.Sheets(resultsheet)
destrow = 1
totalcolumn = 1
totalwks = wkb.Sheets.Count
For i = 1 To totalwks
Set wks = wkb.Sheets(i) 'Iterate over all sheets
wksname = wks.Name
If wksname <> resultsheet Then 'Exclude the overview sheet
rowdata = True
columndata = True
thisrow = 2
thiscolumn = 1
totalempty = 0
While rowdata = True
If i = 1 Then 'First sheet section
a = wks.Cells(thisrow - 1, thiscolumn)
If a <> "" Then
wks1.Cells(destrow, thiscolumn) = a
thiscolumn = thiscolumn + 1
Else
If thisrow = 2 Then
totalcolumn = thiscolumn
End If
totalempty = totalempty + 1
If totalempty = totalcolumn Then
rowdata = False
End If
If thiscolumn = totalcolumn Then
thisrow = thisrow + 1
thiscolumn = 1
destrow = destrow + 1
totalempty = 0
End If
End If
Else ' Any other Sheet section
a = wks.Cells(thisrow, thiscolumn)
If a <> "" Then
rowdata = True
wks1.Cells(destrow, thiscolumn) = a
thiscolumn = thiscolumn + 1
Else
totalempty = totalempty + 1
If totalempty = totalcolumn Then
rowdata = False
End If
If thiscolumn = totalcolumn Then
thisrow = thisrow + 1
thiscolumn = 1
destrow = destrow + 1
totalempty = 0
End If
End If
End If
Wend
End If
Next i
Exit Sub
SheetError:
If Err.Number = 9 Then
createwks = MsgBox("Worksheet " & resultsheet & " doesn't exist" & vbCrLf & "Do you want to create it?", vbYesNo, Error)
End If
If createwks = 6 Then
Set wks1 = wkb.Worksheets.Add(After:=Worksheets(Worksheets.Count))
wks1.Name = resultsheet
Resume
End If
End Sub
Вам нужно открыть Macros/VBA наЭта рабочая книгавставьте модуль и вставьте этот код с правой стороны, затем выполните его и проверьте содержимое на листе с именемОбзоркогда это закончится.
решение2
Я бы сделал это вручную :)
Вы можете взглянуть наэто решение (Объединить данные по позиции), вы увидите, что накладные расходы одинаковы:
На каждом рабочем листе, содержащем данные, которые вы хотите консолидировать, настройте данные, выполнив следующие действия:
Убедитесь, что каждый диапазон данных представлен в формате списка: каждый столбец имеет метку в первой строке и содержит схожие факты, а в списке нет пустых строк или столбцов.
Поместите каждый диапазон на отдельный рабочий лист, но не помещайте диапазоны на тот рабочий лист, где вы планируете выполнить консолидацию.
Убедитесь, что все диапазоны имеют одинаковую компоновку.
На главном рабочем листе щелкните верхнюю левую ячейку области, в которой вы хотите отобразить консолидированные данные.
Примечание. Чтобы избежать перезаписи существующих данных на целевом листе данными, которые вы консолидируете, убедитесь, что вы оставили достаточно ячеек справа и под этой ячейкой для консолидированных данных.
... и так долго ...
решение3
Я не вижу никаких преимуществ в этом. Я не могу сказать, что вам нужно сделать, но если вы разделили данные на несколько листов, у вас должна быть причина сделать это. Если у вас есть причина, зачем объединять их вместе? Для меня это бессмысленно. Хорошо, что бы я сделал, так это зачем мне вообще видеть их все вместе? Это просто затрудняет поиск чего-либо. Подождите, да, только если вы хотите использовать функцию редактирования, чтобы найти на нем определенные данные. Но нужно ли делать это много раз? Я бы, если есть что-то связанное, сделал, например, SUM или другое резюме на каждом листе, а на новом листе сделал перекрестную ссылку для этого поля на каждой отдельной электронной таблице, чтобы объединить данные, не копируя все данные только на один лист. Если вы хороший программист, первое решение для копирования может помочь, но это не так просто, вы увидите. И последнее, но не менее важное: если на каждом листе увеличивается количество строк, убедитесь, что SUM или что-то еще находится сверху и справа, чтобы лист увеличивался, но консолидированные данные не пострадали.