プロが教える店舗&オフィスのセキュリティ対策術

Sheet1のA1にSheet2の(A1:A10)の合計とSheet3の(A1:A10)の合計を表示したいです。
ただしシート名は都度変更するので固定はできないです。
関数でできるのかマクロでできるのかわかりません。
マクロでしてみましたが動きませんでした。
お忙しいと思いますがよろしくお願いします。

質問者からの補足コメント

  • 書き忘れていました。
    Sheetも任意に増やしたいです。
    増やしたシートも合計に入れたいです。
    表記漏れをしてしまいすいません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/11/14 14:13
  • うーん・・・

    わかりにくい質問ですいません。
    Sheet1に各シートの合計数をまとめてA1に表記したい。
    Sheet2~都度増やす Sheet数は用途ごとに増やしたい。

    >合計の対象とするシート」がどれとどれであるかはどのようにして識別できるのでしょうか?
    Sheet2から任意に増やしたSheet全部です。
    Sheet2,Sheet3,Sheet4…
    今のことろ増やせるSheet数は30個まで考えています。
    Sheet名は任意なのでどうすればいいのか悩んでいます。
    合計するSheetはどのSheetも一緒の箇所です。
    Sheet2でもSheet3,4…でも(A1:A10)の合計をSheet1のA1に総合計を入れたいです。
    できますでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/11/14 14:50
  • うーん・・・

    たくさんの回答ありがとうございます。
    Worksheets("Sheet1").Cells(1, 1).Value = t
    で止まってしまうのですがなにかありますでしょうか?
    セルにはなにも入っていないのにマクロ実行時エラーがでます。

    No.6の回答に寄せられた補足コメントです。 補足日時:2019/11/14 16:06

A 回答 (9件)

数式ならシート名の変化に自動的に対応する仕組みのはず




マクロの場合シート名自体をシート1の規定のセルに入力するようにすれば良い

マクロはそのシート名定義のセル値を使ってアクセスする

もし、シートの順番が変わらないなら、シート名でなくシートの順番で指定するというやり方も可能
この回答への補足あり
    • good
    • 0

普通シート名を変更した場合は、


Worksheets("変更後のシート名").Cells(1,1).Value
と書きますが、シートにはもう一つオブジェクト名というのがあります。
Sheet1.Cells(1,1).Value
これなら、シート名の変更には左右されません。

増えたシートにも対応するのは、シートの順番を使えばよろしいかと。
    • good
    • 0

こんにちは



>シート名は都度変更するので固定はできないです
>Sheetも任意に増やしたいです。

とのことですが、ブックを見たときに「合計の対象とするシート」がどれとどれであるかはどのようにして識別できるのでしょうか?
その方法を論理的に説明できるようであれば、関数やマクロで対応可能かも知れません。

「質問者様でなければ区別できない」ような場合は、単純な計算処理では不可能でしょう。(対象シートを、都度(人間に)選んでもらうような処理が必要になる)
この回答への補足あり
    • good
    • 0

串刺しでできませんか?

    • good
    • 0

№4さんも書かれてますが(多分これが言いたいと思います)、空白シートで挟んで串刺し計算する方法がいいと思います。



https://kokodane.com/tec2_38b.htm
    • good
    • 0

No3です



どうやら、「Sheet1以外のシートの合計をSheet1に記載したい」ということのようですね。

>できますでしょうか?
関数でもマクロでも可能と思います。

◇関数の場合
No4様が提示の方法ですが、シート名が完全にフリーにはならないのが欠点かも知れません。
原則として、「スタート」と「エンド」(←名前は何でも良いですが)に挟まれたシートが対象になります。
「スタート」や「エンド」のシートを含めても良いですし、あくまでも目印として使い、白紙のシートにしておいても良いです。
Sheet1のA1セルに
 =SUM(スタート:エンド!A1:A10)
の式を入れておくと、スタートシートからエンドシートまでの間にあるシートのA1:A10の合計が計算されます。


◇マクロで計算する場合
Sheet1以外のシートを全て対象にします。
各セルの値が数値であることのチェック等は行っていません。

Sub Sample()
Dim s, c, t
t = 0

For Each s In Worksheets
 If s.Name <> "Sheet1" Then
  For Each c In s.Range("A1:A10")
   t = t + c.Value
  Next c
 End If
Next s
Worksheets("Sheet1").Cells(1, 1).Value = t
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。

お礼日時:2019/11/14 17:02

マクロ的には


1)自分自身のブックにシートが何枚存在するのかを取得する
2)取得したシート数分処理を繰り返す
3)シート一つ分の処理を実行する
4)シート1に結果を記録する

こういう感じなら如何様にでも対応できる
    • good
    • 0

No6です



>Worksheets("Sheet1").Cells(1, 1).Value = t
>で止まってしまうのですがなにかありますでしょうか?
そこで止まるのははっきりわかりませんが、『数値であることのチェック等は行っていません』と少し手抜きしたのが悪かったみたいですね。

中ほどの
   t = t + c.Value
の1行を
If IsNumeric(c.Value) Then t = t + c.Value
に入替えると、うまくいきませんでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。できました。

お礼日時:2019/11/14 17:02

No8です



後から思いつきましたが・・・
もしかすると、そのブック内には「Sheet1」という名前のシートが存在してないってことはありませんか?(それなら、その行でエラーが発生することが理解できます)
    • good
    • 0

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

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