2012-04-12 15 views
0

私は各タブの日付と共にタブを表すタブを持つExcelワークブックを持っています。最後のシートでこれらの合計を取ることはできますが、新しいスプレッドシートが追加されるときに、指定されたシートの総数を計算するためには数式/マクロが必要です。合計シートの新規追加されたExcelシートの自動合計

注: - すべてのセルが同じままであろう(E56)

+1

何を試しましたか? – markblandford

答えて

0

私はあなたがしようとしているのか理解していません。ユーザーが新しいシートに情報を配置してE56に値が入るまで、NewSheet!E56の値を合計シートに追加することはほとんどありません。

しかし、イベントを使用する必要があると思われます。以下は、ワークブックのMicrosoft ExcelオブジェクトThisWorkbookに配置する必要があるいくつかのイベントルーチンです。これらはイミディエイトウィンドウに出力されるので、いつ発射されたかがわかります。注:1つのユーザーイベントに対して複数のイベントを発生させることができます。たとえば、新しいワークシートを作成すると、「新しいシートの作成」、「古いシートの非アクティブ化」および「新しいシートのアクティブ化」がトリガーされます。

は、イベントをトリガーするこれらのルーチンの1内の任意のステートメントの周り

Application.EnableEvents = False 

    Application.EnableEvents = True 

を含めることを忘れないでください。

おそらく、あなたはSheetDeactivateを使用する必要があります。ユーザーがシートを離れるときは、E56で値を確認します。存在する場合は、合計シートに含めるかどうかを確認します。遊びをする。あなたのユーザーが何をするか。これらのルーチンに追加して、さらに調査してください。がんばろう。

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 

    Debug.Print "Workbook_SheetActivate " & Sh.Name 

End Sub 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 

    Call MsgBox("Workbook_BeforeClose", vbOKOnly) 

End Sub 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range) 

    Debug.Print "Workbook_SheetChange " & Sh.Name & " " & Source.Address 

End Sub 
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 

    Debug.Print "Workbook_SheetDeactivate " & Sh.Name 

End Sub 
Private Sub Workbook_NewSheet(ByVal Sh As Object) 

    Debug.Print "Workbook_NewSheet " & Sh.Name 

End Sub 
Sub Workbook_Open() 

    Debug.Print "Workbook_Open" 

End Sub 

要件

の明確化に応じて、余分なセクションの下のコードは、ブックが開かれるたびにTOTALを除くすべてのワークシートのためのセルE56の総計を再計算し、ワークシートのTOTALに結果を格納し、ユーザーが現在のワークシートを変更するたびに

Excelで一貫したタイミングを得ることは難しいですが、私の実験によれば、この再計算のためにワークシートの切り替えが遅れることに気づく前に、500~1000のワークシートが必要です。

このコードをインストールする方法を知っているかどうかわかりませんので、ここに簡単な説明があります。彼らが短すぎるかどうか尋ねなさい。

  • 関連するブックを開きます。
  • Alt+F11をクリックします。 VBAエディタが表示されます。左下には、プロジェクトエクスプローラが表示されます。クリックしない場合はCtrl+Rをクリックしてください。プロジェクトエクスプローラの表示は、次のようになります。

VBAProject (Xxxxxxxx.xls) 
    Microsoft Excel Objects 
     Sheet1 (Xxxxxxxxx) 
     Sheet10 (Xxxxxxxxx) 
     Sheet11 (Xxxxxxx) 
     : 
     ThisWorkbook 
  • ThisWorkbookをクリックします。画面の右上に白いターンがあります。
  • 下のコードをその白い領域にコピーします。
  • これ以上の操作は必要ありません。 Workbook_Open()およびWorkbook_SheetDeactivate()マクロは、必要に応じて自動的に実行されます。

幸運。

Option Explicit 

Sub CalcAndSaveGrandTotal() 

    Dim InxWksht As Long 
    Dim TotalGrand As Double 

    TotalGrand = 0# 
    For InxWksht = 1 To Worksheets.Count 
    If Not UCase(Worksheets(InxWksht).Name) = "TOTAL" Then 
     ' This worksheet is not the totals worksheet 
     If IsNumeric(Worksheets(InxWksht).Range("E56").Value) Then   '### 
     TotalGrand = TotalGrand + Worksheets(InxWksht).Range("E56").Value 
     End If                '### 
    End If 
    Next 

    'Write grand total to worksheet TOTAL 
    ' ##### Change the address of the destination cell as required 
    Worksheets("TOTAL").Range("D6").Value = TotalGrand 

End Sub 
Sub Workbook_Open() 

    ' The workbook has just been opened. 

    Call CalcAndSaveGrandTotal 

End Sub 
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 

    ' The user has selected a new worksheet or has created a new worksheet. 

    Call CalcAndSaveGrandTotal 

End Sub 
+0

私の質問は、毎日新しいシートを追加するとExcelシートで、各シートの合計がTOTALという名前のシートに自動的に計算され、E56がデータに関係なくすべてのシートの合計を含むセルそのシートに上記の例が同じであれば、親切に私に知らせてあげてください。マクロを書く方法がわからないので、あらかじめ寛大な助けをしてくれてありがとうございます。しかし、私がそれを書いてしまうかもしれないことを理解させてください:) – user1100199

+0

私はあなたの要求を理解しておらず、今はもっと具体的にすることができます。あなたはVBAを知らないかもしれませんが、VBAプログラマがあなたの必要条件を満たすために必要と考える情報はありますか?いくつかの例題があります。新しいワークシートはどのように作成されますか?たとえば、ユーザーによって手動で作成されているか、またはWebサイトからインポートされていますか?合計で何枚ですか?シートが作成されると、その値は変更されますか?ワークシートTOTAL内の合計はどこにありますか? –

+0

シートは毎日手動で作成されます。毎月最大20枚のシートが作成されます。前回の日付では値は変更されません.D6になると思ったように、あなたの担当者の電子メールでサンプルをExcelする必要があります。 – user1100199

0

私は、これはプログラミングのフォーラムです知っているが、この特定の「必要性」は、すべての配管なしで解けるように思われます。

私は古い隠された最初と最後のシートのトリックが好きです。

  1. 最終
  2. 場所これら2枚の間に、あなたの現在のデータシートと呼ばれるシートを作成しますまず
  3. と呼ばれるシートを作成します。ちょうど今:(最終E56初!)
  4. = SUM:
  5. は今、あなたのようなので、すべてのこれらのシートからセルを合計する3D数式を使用することができます最終
  6. シートにまずを隠します最後に表示されたデータシートの後にブックを追加すると、Excelはまだ隠れた最後のシートの前にそのシートを挿入するので、数式はそのまま展開されます。
関連する問題