• 締切済み

指定したシートの和を求めたい

Excel2003を使用しています。 同じ形式の表が入力されたシートが1~31までと合計シートで32シートあります。 (日々集計ごとのシートです) シート名も「1」~「31」と「合計」にしています。 ランダムの日付指定で集計を求められるのですが 合計シートの表外に数字を入れて 指定されたシートの和を合計シートに出したいと思っていますが可能でしょうか? 合計シートのA1に1を入力 合計シートのB1に3を入力 合計シートのA3にシート1~3のA3の和が出る といった感じです。 説明不足があればすいません。 教えてくれると嬉しいです。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

シート1~3,の1や3はなに?シート名?シート名を数字にしているのですか。 入力は簡単だが、あまりすすめられない。 ーー それと同じ様式・フォーマット(データの行列項目の配置)で在れば、 Sheet4のA12に=SUM(Sheet1:Sheet3!A12)のようにして、Sheet1、Sheet2、Sheet3のA12セルの数値を足し算できる。 これはSheet1からSheet3までと言う意味になろう。しかしここ「から」は名前名称上のものでなく、シートタブがたまたま Sheet1、Sheet2、Sheet3の順位ならんでいた場合の話で、順序を移動する操作が行われると、別の答えになる 不安定さが在る。 この点認識しているのか? ーー 合計シートでA1,A2に入力されるものがシート名そのものとすると、=INDIRECT(A1&"!A12")で=Sheet1!A12と入れる場合と同じ値が取ってこれる。 、=INDIRECT(B1&"!A12")でも=Sheet3!A12と入れる場合と同じ値が取ってこれる。 =INDIRECT(A1&"!a12")+INDIRECT(B1&"!A12")も両者の和を出せる。 しかし=ROUNDUP(INDIRECT(A1&"!a12")+INDIRECT(B1&"!A12"),0)のようなことは出来るが、 =SUM(Sheet1:Sheet3!A12)のSheet1とSheet3をINDIRECTで置き換えられないと思う。 E12に=A1&":"&B1&"!"&"A12"ト入れて、Sheet1:Sheet3!A12となっている状態で =SUM(INDIRECT(E12))としてもエラーになる。 ーー この点について絶対の自信というのは無いが、無理と思う。 良い回答が出れば、私も勉強します。 ーー 其れで関数以外の方法を使わざるを得ないのでは。 ユーザー関数を定義して Function sum3D(a) f = Worksheets("Sheet4").Range("A1") t = Worksheets("Sheet4").Range("B1") fi = Worksheets(f).Index ti = Worksheets(t).Index 'MsgBox fi & " " & ti 'MsgBox a.Row t = 0 For i = fi To ti MsgBox Worksheets(i).Cells(a.Row, a.Column) t = t + Worksheets(i).Cells(a.Row, a.Column) Next i sum3D = t End Function ーー Sheet4(合計シート)のセル(何処でも良い)に =sum3d(A12)と入れる。 A12は各シートの合計したい1つのセル(同一番地)を指定する。 Sheet4上で式の複写も可能 ーー 全体にVBAも含めて、質問者には少し難しい課題と思う。 ーー だから、手作業で3D集計(Googleで照会のこと)をやってください。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

VBAにしてもSUMPRODUCTやSUBTOTAL、INDIRECTもそう、質問者はこれらは知らなかったと思われます。 これらを知ることから始めてもよい。記載簡単でもやっていることがわからなければ簡単でないだろう。 対象のシート名は決まっているので、作業セル31個を1つのシート上に作り、31シート分の各合計をあらかじめ式で求めておく。合計シートではどの範囲かを入れなくても、見てわかればいいならそれでも良い。

tamisara
質問者

補足

だからなんなんでしょうか?

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

>合計シートのA1に1を入力 >合計シートのB1に3を入力 >合計シートのA3にシート1~3のA3の和 合計シートのA3に =SUMPRODUCT(SUBTOTAL(9,INDIRECT(INDEX(ROW(INDEX(A:A,A1):INDEX(A:A,B1))&"!a3",)))) などのように。 #少し簡単バージョン: =SUMPRODUCT((ROW(A1:A31)>=A1)*(ROW(A1:A31)<=B1)*SUBTOTAL(9,INDIRECT("'"&ROW(A1:A31)&"'!a3"))) #なぜこれらで計算できるのかの説明はありません。それ故計算のロジックとしては,マクロを使った方が遙かに簡単です。

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.4

そうだね、VBAならなんでもできるね! ひとつづつ考えていけばできる、というのはかなり難易度の高いものにも当てはまるんだけど 簡単そうに言い放ったままで何の解決にもならなそうなので、さくっと書きました。 たぶんこのまま動くはずです。 シート名が全角数字の場合は別途処理する追加する必要があるかも。 Sub Macro1() Dim goukei As Double Dim n_start As ingeter Dim n_end As Integer With Sheets("合計") n_start = Range("A1").Value n_end = Range("A2").Value End With ' このループは、 n_start(A1セルの値) < n_end(A2セルの値) でないと動きません。 For i = n_start To n_end With Sheets(CStr(i)) ' 数値なら合計に加算する。数値じゃないならスルー If IsNumeric(Range("A3").Value) = True Then goukei = goukei + Range("A3").Value End If End With Next i ' 最後に合計シートのA3セルに合計の値を書き込む Sheets("合計").Select Range("A3").Value = goukei End Sub

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

VBAを使うと良いです。 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9c48.html 例題) ブック内の全てのワークシートを順に処理するには? みたいなサンプルもあります。 シート名をどう表現するか。 http://www.voicechatjapan.com/excelvba/VBArei2.htm >合計シートのA3にシート1~3のA3の和が出る 対象シートをどう変えていくか。for文使う。 機能的なことはわかっているのだから、 VBAでどの命令を使うか考えてみる。 ポイントをつかんで、1つずつ考えていけばできるレベルです。

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.2

VBAならなんでもできる。 しかし、No1のような頭の悪い回答よりもっと頭の悪い回答を 力業の超ゴリ押しです。 2つのシートの値を合計するだけなら簡単なのですが、 質問のようなシートの範囲を指定する場合は工夫しないといけません。 例えばA5~A35に、シート名を列記する。 合計シートのA3に=SUM(B5:B35)と数式を入れる。 B5に次のような数式を入れる =IF(A5>=$A$1,IF(A5<=$A$2,IF(ISERR(INDIRECT(ADDRESS(3,1,,,A5))),0,INDIRECT(ADDRESS(3,1,,,A5))),""),"") B5セルをコピーしてB6~B35セルに貼り付ける。 画像みたいな感じにします。 ただ、この例の場合だと、A1セルには必ず指定するシートの小さい値、A2には大きい値でないとダメです。 数式内関数の細かい意味はヘルプでも見てください。

  • imo8001
  • ベストアンサー率14% (26/179)
回答No.1

VBAなら可能です

関連するQ&A