プロが教えるわが家の防犯対策術!

こんばんは。
ご教示をお願いします。

シート(左から)
「集計」「1月」「2月」「3月」があります。
「1月」「2月」「3月」のシートのA1セルの値(数値)の合計を集計表に表示させたいと思っています。
しかし、時として「4月」「5月」など、集計元のシート数が変更します。
このため、VBAでシート数をカウントし、シート数の増減に対応したいと思っていますができません。
以下のプロシージャの「ここの書き方がわかりません」の部分に、シートをインデックスで指定しましたがエラーとなってしまいます。(WorkSheets(2):WorkSheets(WorkSheets.count!RC)
解決策があれば、よろしくお願いします。(エクセル2016使用)

sheets(1).range("A1").Select
Selection.formulaR1C1="=SUM(「ここの書き方がわかりません」!RC)"

A 回答 (3件)

こんなので良いんでしょうか?



.FormulaR1C1 = "=SUM(" & Worksheets(2).Name & ":" & Worksheets(Worksheets.Count).Name & "!RC)"

ただ、マクロ実行後にシート位置を移動しちゃうと、再計算されて値が変わっちゃいますよ?
トラブルの原因になりそうなので、数式→値に変換しといた方が良いような気がします。
    • good
    • 0
この回答へのお礼

こんにちは、
ご教示をいただきまして、ありがとうございました。
数式⇒値への変換、アドバイスありがとうございます。

お礼日時:2020/07/11 12:48

こんばんは!



お望みの串刺し計算の方法ではありませんが、
一例です。
インプットボックスで集計したいシートを選択するようにしてみました。

標準モジュールです。

Sub Sample1()
 Dim k As Long
 Dim sN As String
 Dim myAry

1: sN = sN & "_" & Application.InputBox("集計したいシート名を入力")
 If MsgBox("他にも集計したいシートがありますか?", vbYesNo) = vbYes Then
  GoTo 1
 Else
  sN = Mid(sN, 2, Len(sN))
   myAry = Split(sN, "_")
   With Worksheets("集計").Range("A1")
    If UBound(myAry) > 0 Then
     MsgBox sN & vbCrLf & "シートの集計をします"
      .Value = 0
      For k = 0 To UBound(myAry)
       On Error Resume Next '//←念のため★//
       .Value = .Value + Worksheets(myAry(k)).Range("A1")
      Next k
    End If
   End With
  End If
End Sub

こんな感じではどうでしょうか?

※ 細かいエラー処理(例えば存在しないシート名の入力などの回避)が必要かもしれませんが、
まずはこの程度で・・・m(_ _)m
    • good
    • 0
この回答へのお礼

こんにちは、
ご教示ありがとうございました。

お礼日時:2020/07/11 12:48

自分は都度変更するのが嫌だから、串刺し計算する範囲を別のシートで指定するようにしている。


「ここから」「ここまで」と2つシートを作って、計算したい範囲をそのシートで挟み込みます。

…まあ、数式使った場合ですけどね。
マクロでも同様にできると思います。
検討してみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

こんにちは、
ご教示ありがとうございました。

お礼日時:2020/07/11 12:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A