2015-06-25 3 views
0

Предположим, у меня есть n листов. Мой второй лист называется «Calc», где я делаю свой подсчет/расчет.Добавление из следующего листа в конец листа

Я хотел бы добавить все A1, A2 ... A1000, в Z1, Z2 ... Z1000 из листа 3 (лист после Calc) в лист n.

Это импортированные листы. Я не знаю названия этих листов, и мне не разрешают их менять.

Любые листы между листом 3 и листом 3 могут быть удалены или добавлены в любое время.

Сначала я думал о попытке = SUM (''! A20), но он автоматически меняет '' на первый и последний листы.

Когда я удаляю последний лист, он дает мне ошибку и расчет не выполняется. Я думал о том, чтобы делать косвенные, но это было бы очень утомительно, поскольку я не могу перетащить, чтобы сменить ячейки в листе 3 на лист n.

например: =SUM(INDIRECT("'"&F2&"'!C4"),INDIRECT("'"&F3&"'!C4")), C4 не меняется, поскольку я перетаскиваю их по доске.

Любая другая идея?

+0

Идея - если я правильно понимаю - это то, что если на вашем листе «Calc» в строке 1 перечислены все имена листов в книге. Затем под этим вы можете сделать формулу SUM(), косвенно указав на A1, B1 и т. Д., Чтобы получить имя листа. Затем перетащите это поперек? – BruceWayne

+0

Это помечено VBA, но вы нацелены на решение, отличное от VBA? – Greg

+0

Это была моя первая идея. Однако ячейки в косвенной функции, которые ссылаются на другой лист, не изменяются при перетаскивании. Выше, C4 не меняется. Поэтому, если у меня есть 1000 ячеек, тогда мне придется менять их для каждого из них. – Seven

ответ

0

Позвольте мне угадать:

  1. У вас есть много листов;
  2. Вы можете удалить или добавить новый лист;
  3. Имеются данные в Range("A1:Z1000") на каждом листе;
  4. Вы хотите суммировать каждый лист Range("A1:Z1000") на листе («Calc»). Диапазон («A1: Z1000»);

Каждый лист имеет данные в A1:Z1000. enter image description here

Сумма в листе «Calc». enter image description here

Если это так, попробуйте следующее:

Sub SumEverySheet() 

Dim Sh As Worksheet 
Dim i, j As Integer 
Dim cellValue 

For Each Sh In Worksheets 
    If Sh.Name <> "Sheet1" And Sh.Name <> "Calc" Then 
     ' row: 1 to 1000 
     For i = 1 To 1000 
      ' A - Z (1 - 26) 
      For j = 1 To 26 
       cellValue = Sheets("Calc").Cells(i, j) 
       sheetValue = Sh.Cells(i, j) 
       Sheets("Calc").Cells(i, j) = sheetValue + cellValue 
      Next j 
     Next i 
    End If 
Next Sh 
End Sub 

Поместите этот макрос в Workbook_AfterSave может заставить ее работать автоматически после сохранения.

Private Sub Workbook_AfterSave(ByVal Success As Boolean) 
    MsgBox "after save" 
    Call SumEverySheet 
End Sub 

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

Смежные вопросы