こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2018-06-09 20:02:19

QNo.9506702

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2018-06-10 07:54:05

お礼

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

投稿日時 - 2018-06-10 10:40:58

ANo.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セルの値を合計して返すという関数ができます。

チェックしていないのでどっか間違いがあるかもしれませんが、とりいそぎ、「ヒント」ということで。

投稿日時 - 2018-06-09 20:38:49

お礼

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

投稿日時 - 2018-06-10 10:40:34