私は各タブの日付と共にタブを表すタブを持つExcelワークブックを持っています。最後のシートでこれらの合計を取ることはできますが、新しいスプレッドシートが追加されるときに、指定されたシートの総数を計算するためには数式/マクロが必要です。合計シートの新規追加されたExcelシートの自動合計
注: - すべてのセルが同じままであろう(E56)
私は各タブの日付と共にタブを表すタブを持つExcelワークブックを持っています。最後のシートでこれらの合計を取ることはできますが、新しいスプレッドシートが追加されるときに、指定されたシートの総数を計算するためには数式/マクロが必要です。合計シートの新規追加されたExcelシートの自動合計
注: - すべてのセルが同じままであろう(E56)
私はあなたがしようとしているのか理解していません。ユーザーが新しいシートに情報を配置して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
をクリックします。画面の右上に白いターンがあります。幸運。
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
私の質問は、毎日新しいシートを追加するとExcelシートで、各シートの合計がTOTALという名前のシートに自動的に計算され、E56がデータに関係なくすべてのシートの合計を含むセルそのシートに上記の例が同じであれば、親切に私に知らせてあげてください。マクロを書く方法がわからないので、あらかじめ寛大な助けをしてくれてありがとうございます。しかし、私がそれを書いてしまうかもしれないことを理解させてください:) – user1100199
私はあなたの要求を理解しておらず、今はもっと具体的にすることができます。あなたはVBAを知らないかもしれませんが、VBAプログラマがあなたの必要条件を満たすために必要と考える情報はありますか?いくつかの例題があります。新しいワークシートはどのように作成されますか?たとえば、ユーザーによって手動で作成されているか、またはWebサイトからインポートされていますか?合計で何枚ですか?シートが作成されると、その値は変更されますか?ワークシートTOTAL内の合計はどこにありますか? –
シートは毎日手動で作成されます。毎月最大20枚のシートが作成されます。前回の日付では値は変更されません.D6になると思ったように、あなたの担当者の電子メールでサンプルをExcelする必要があります。 – user1100199
私は、これはプログラミングのフォーラムです知っているが、この特定の「必要性」は、すべての配管なしで解けるように思われます。
私は古い隠された最初と最後のシートのトリックが好きです。
何を試しましたか? – markblandford