• 締切済み

Excel VBA 複数のSheet の合計

Excel VBA  超超 初心者です。見よう見まねで、複数のSheet の L11:Q1000 ,T1:AW100 セル範囲にある文字 "~" を計算できたのですが、 更に各Sheet で計算された合計をしたいのですが、さっぱり判りません。Sheet 名は、バラバラです。合計は、最初か最後のsheet のどこかのセルに表示させたいです。どなたかヒントをてください。よろしくお願いします。 Sub すべてのシートでマクロ実行() Application.ScreenUpdating = False Dim シート As Worksheet For Each シート In Worksheets シート.Select Range("H3").Select ActiveCell.FormulaR1C1 = "=COUNTIF(R[8]C[4]:R[997]C[9],""*~*"")" Range("I3").Select ActiveCell.FormulaR1C1 = "=COUNTIF(R[-2]C[11]:R[997]C[40],""*~*"")" Range("I4").Select Next Application.ScreenUpdating = True End Sub

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

セルたちの集計には、 ・マクロで必要な計算(合計を求める計算)を行い  計算結果を指定するセルに書き出す方法と ・必要な計算を行う計算式をマクロで組み立て、  その組み立てた計算式を  指定するセルに書き出す方法とがあるわけですが、 どちらかといえば、前者のほうがポピュラーです。 今回は後者を求めているようですので 以下のようなマクロはいかがでしょうか。 Sub MyTest()  Dim SShName As String '先頭のシート名  Dim EShName As String '末尾のシート名    With ThisWorkbook      SShName = .Sheets(1).Name   EShName = .Sheets(.Sheets.Count).Name     .Sheets(1).Range("A1").Value = _     "=SUM(" & SShName & ":" & EShName & "!H3)"     .Sheets(1).Range("A2").Value = _     "=SUM(" & SShName & ":" & EShName & "!I3)"     .Sheets(1).Range("A3").Value = _     "=SUM(" & SShName & ":" & EShName & "!I4)"    End With End Sub

noname#231964
質問者

お礼

丁寧な説明、ヒントありがとうございました。先ほど、何とかプログラムが動作して、合計を出す事ができました。ありがとうございました。今年の4月から週末ごとに、Excel VBA を楽しんでいます。出来上がったプログラムが動作した時の感激は、なんともいえません。今回は、業務にも使用できるので、本当に助かりました。

回答No.1

For Each を使いこなしているなら、初心者は十分卒業でしょう。(^^;) それで、シートごとの合計を計算する方法ですが、一番簡単なのは、数式ではなく値を直接拾って合計してしまう方法です。 たとえば、すべてのシートのH3セルの値を合計して、「Sheet1」の「A1」セルに表示したければ、上記のサンプルを基にすると Dim シート As Worksheet Dim Sum1 as single Sum1=0 '集計用の変数 For Each シート In Worksheets 'それぞれのシートでH3セルの値を拾って足す Sum1 = Sum1 + シート.Range("H3").Value Next Worksheets("Sheet1").Range("A1").value = Sum1 という感じです。 少し応用して、自分で「関数マクロ」を作ると、こういう感じになります。 Function SumInterSheet(X as stiring) Dim Sum1 as single Sum1=0 '集計用の変数 For Each シート In Worksheets 'それぞれのシートでH3セルの値を拾って足す Sum1 = Sum1 + シート.Range(X).Value Next SumInterSheet = Sum1 '関数の答えを返す。 End Function このようなマクロをブックに作ると、そのブックのシートで数式として =SumInterSheet("H1") と、入力することで、すべてのシートのH1セルの値を合計して返すという関数ができます。 チェックしていないのでどっか間違いがあるかもしれませんが、とりいそぎ、「ヒント」ということで。

noname#231964
質問者

お礼

丁寧な説明、ヒントありがとうございました。先ほど、何とかプログラムが動作して、合計を出す事ができました。ありがとうございました。今年の4月から週末ごとに、Excel VBA を楽しんでいます。出来上がったプログラムが動作した時の感激は、なんともいえません。今回は、業務にも使用できるので、本当に助かりました。

関連するQ&A