2015-06-25 22 views
0

假設我有n張紙。我的第二張紙被稱爲「Calc」,這是我進行求和/計算的地方。從下一張添加到最後一張

我想從第3張(Calc之後的紙張)到第n張,將所有A1,A2 ... A1000,添加到Z1,Z2 ... Z1000。

這些是進口紙張。我不知道這些表的名稱,我不允許改變它們。

在片材3到片材n之間(包括片材3到片材n)之間的任何片材可以隨時移除或添加。

首先,我想嘗試= SUM(「‘!A20),但它會自動更改’」的第一和最後一個表。

當我刪除最後一張紙時,它給我錯誤,計算失敗。我正在考慮做間接的,但這將是非常乏味的,因爲我無法拖動將表單3中的單元格更改爲表單n。

例如:=SUM(INDIRECT("'"&F2&"'!C4"),INDIRECT("'"&F3&"'!C4")),當我將它們全面拖拽時,C4不會改變。

任何其他的想法?

+0

一個想法 - 如果我理解正確 - 如果在「Calc」工作表上,第1行列出工作簿中的所有工作表名稱。然後,在此之下,可以通過間接指向A1,B1等來執行SUM()公式以獲取工作表名稱。然後把它拖過去? – BruceWayne

+0

這是標記爲VBA,但您正在尋找非VBA解決方案? – Greg

+0

這是我的第一個想法。但是,引用另一個工作表的間接函數中的單元格在拖動時不會更改。以上,C4不會改變。所以如果我有1000個細胞,那麼我必須改變它們中的每一個。 – Seven

回答

0

讓我猜:

  1. 你有很多張;
  2. 您可以刪除或添加新工作表;
  3. 每頁有Range("A1:Z1000")的數據;
  4. 您希望在工作表(「Calc」)中彙總每張工作表的Range("A1:Z1000")。範圍(「A1:Z1000」);

每張牀上都有數據A1:Z1000enter 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 

希望這會對你有所幫助。

相關問題