• ベストアンサー

【Excel2003】複数Sheetを対象にしたSUMIFの使い方につ

【Excel2003】複数Sheetを対象にしたSUMIFの使い方について 実際は添付図と違い、表がSheet別になっています。 日付ごとに数量と件数(=金額の入ったシート数で計算)を出したいのです。 計算式は普通にSUMIFで括れば良いと思います。 しかし、実際は検索先となるSheetが30枚ほどあるのです。 =SUMIF(Sheet1!XXX,XXX,Sheet1!XXX)+SUMIF(Sheet2!XXX,XXX,Sheet2!XXX)+・・・・・ とかなり長い計算式となり「長すぎるよ!」みたいなエラーが出ます。 これを回避する方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答No4です。 試験をしていただきありがとうございます。 同じ日付がシートでまたがることがあるということでその対応策ですが次のようにすればよいでしょう。 作業列としてG,H列は変わりませんが、H列のとなりにI1セルには日付の最高値とでも入力します。 I2セルには次の式を入力して下方にオートフィルドラッグします。 =IF($G2="","",MAX(INDIRECT("'"&$G2&"'!A:A"))) そこでB2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR($A2="",$A2<$H$2),"",IF(AND(COUNTIF($H:$H,$A2)=1,COUNTIF($I:$I,$A2)=1), SUMIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,0))&"'!A:A"),$A2,INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,0))&"'!D:D"))+SUMIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$I:$I,0))&"'!A:A"),$A2,INDIRECT("'"&INDEX($G:$G,MATCH($A2,$I:$I,0))&"'!D:D")),SUMIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,1))&"'!A:A"),$A2,INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,1))&"'!D:D")))) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR($A2="",$A2<$H$2),"",IF(AND(COUNTIF($H:$H,$A2)=1,COUNTIF($I:$I,$A2)=1), COUNTIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,0))&"'!A:A"),$A2)+COUNTIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$I:$I,0))&"'!A:A"),$A2),COUNTIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,1))&"'!A:A"),$A2)))

jiyoun
質問者

お礼

あまりの多忙にお返事が遅れてしまいました。 試してみたところ無事目的を果たせました。 私のような者のために貴重な時間を割いていただき感謝いたします。 機会があればまたよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

次のようにしてはどうでしょう。 シートの数がたくさんに増しても容易に対応できる方法です。 各シートは1行目にお示しの項目名があり、2行目から下方にそれぞれのデータが入力されているとします。 そのけまとめのためのシートですがA1セルに日付、B1セルに個数、C1セルに件数と入力します。 これらのデータを求めるために作業列を作ります。 例えばG1セルはシート名と入力し下方にはSheet1 Sheet2 Sheet3などと実際の日付のデータが入ったシート名を入力します。この際必ず日付が最も古いデータのシートを2行目にいかだんだんと新しい日付を含むシート名を並べるようにします。シートとシートの間で同じ日付のデータが無いことが条件です。 H1セルには日付の最小値と入力ます。H2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(G2="","",MIN(INDIRECT("'"&$G2&"'!A:A"))) セルの書式は日付にしてください。これで各シートに入力されている日付の最小値が表示されます。 そこでA2セルから下方には5月1日、5月2日、5月3日などの日付を入力します。 B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR($A2="",$A2<$H$2),"",SUMIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,1))&"'!A:A"),$A2,INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,1))&"'!D:D"))) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR($A2="",$A2<$H$2),"",COUNTIF(INDIRECT("'"&INDEX($G:$G,MATCH($A2,$H:$H,1))&"'!A:A"),$A2)) これでどんなにシート数が増えても、また途中でデータが新たに入力された場合でも問題なく対応できるでしょう。一度是非お試しください。ご参考になりましたら幸いです。

jiyoun
質問者

補足

ご回答ありがとうございます。 >シートとシートの間で同じ日付のデータが無いことが条件です。 とても良い方法で件数まで出せるのですが、同じ日付がシートにまたがることがありまして・・・

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 参考になるかどうか判りませんが・・・ 一つの案です。 各Sheetに同じセル配置で、SUMUIFで日付ごとの集計表を作れば、 串刺し計算の方法が使えると思います。 それぞれのSheetに数式を入力するのは大変ですので、 全てのSheetを作業グループ化します。 データが入力されている最初のSheetを開き、Shiftキーを押しながら集計したい最後のSheet見出しをクリックします。 これで作業グループ化されましたので データとはまったく関係ない空いている場所にSUMUIF関数で日付ごとの集計を行います。 その後Sheet見出し上を右クリックし、「作業グループ解除」を選択すれば 各Sheetの同じセル番地にそれぞれのSheetの日付ごとの集計が出来ているはずです。 集計用Sheetの「5/1」のセルをアクティブにし オートSUMのアイコンをクリックします。 そして先ほどの最初のSheetの「5/1」の集計セルを選択し、Shiftキーを押しながら 最後のSheetの「5/1」の集計セルを選択します。 そして、もう一度オートSUMのアイコンをクリック(又はCtrlキーを押しながら、Enterで確定)すれば 全てのSheetの「5/1」の合計が表示されますので それをオートフィルでコピーしてみてはどうでしょうか? 以上、長々と書きましたが 参考になれば幸いです。m(__)m

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

無理してひとつのセルで結果をだすのでなく、作業列を使ったほうがわかりやすいですし、今後シートが増えたり 名前の変更があった場合も対応がしやすいですよ。 A   B   C    D・・・・ 日付 合計 Sheet1 Sheet2・・・ 5/1 ・・・と、C1から右へ集計したいシート名を30個入れておきます。 C2セルに =SUMIF(INDIRECT(C1 & "!A:A"),$A2,INDIRECT( C1 & "!B:B")) 右へ30コピィ それおぞれのシートの集計がでますので、B列にSUMで合計します。

jiyoun
質問者

補足

件数の方はどう書けばいいのでしょう?

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

各シートのシート名が規則正しくSheet1,2,3…30になっているなら, =SUMPRODUCT(SUMIF(INDIRECT("Sheet"&ROW(A1:A30)&"!A:A"),A2,INDIRECT("Sheet"&ROW(A1:A30)&"!D:D"))) のように出来ます。(式中の「A2」にはSUMIFで検索したい日付が入っている。「ROW(A1:A3)」はシート名を作るのに使っているので,変えてはいけない。) またデータメニューの「統合」を使い,シート1~30の表範囲を追加,左端列と上端行にチェックを入れて,A列のリストアップから一気に集計まで出させる事も出来ます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SUMIFの代用

    お世話になります。 ファイル2からファイル1へリンクして計算をしてますが、同時に開いてないと更新されない(VALUE)となるため調べましたら、SUMIF・COUNTIF関数はこのような現象が発生するということでした。 ファイル1はSUMIFを多用しており納得はしましたが、SUM+IFに置き換えれば良いとのことで試しましたが、計算結果がうまくでません。 ファイル1:抜粋    A   B   C 1  12/1  AAA  100 2  12/2  AAA  200 3  12/3  AAA  300 4  12/4  AAA  400 5  12/5  BBB  500 というデータがあります。A:日付 B:コード C:数量 ファイル2表にてAAAの合計数量を出したいのですが、 SUMIF([ファイル2.XLS]sheet1!$B:$B、(ファイル1のコード入力セル)、[ファイル2.XLS]sheet1!$C:$C) にてできるのですが、ファイルを同時に開かずに行いたいのです。 SUM(IF([ファイル2.XLS]sheet1!$B:$B=(ファイル1のコード入力セル)、[ファイル2.XLS]sheet1!$C:$C、0)) に置きかえてもうまくでません。 どなたかアドバイスをお願いいたします。

  • エクセルSUMIFを使った表計算のシートを増やす

    原価計算表を作成していて、内訳表の項目の前に「材料、労務、機械、外注、経費」の部門をプルダウンで選択できるようにし、別シートの計算表にその 部門ごとの合計を出そうと思っています。とりあえず、合計を出すところにSUMIFをいれて内訳表が1シートの時は合計が出せますが、工種ごとにシートが増えていく場合はどのように関数をいれたらいいか教えてください。宜しくお願いします。

  • excel 複数のシートの合計

    エクセルの同じ書式の表が 複数のシートにあります。 (数値や項目などは変動) この複数のシートの表を ひとつのシート下に つなげる方法か 各項目の 合計を 別シートに出す計算式はありませんか。 複数のシートはどんどん増えるので 本当は自動で 増やしても出るようにしたいのですが・・・。 添付した例で言うと sheet1.2.3.に 同じような表があり 各シートの 日用品の合計はいくらと別シートに出るようにしたいのです。

  • 【EXCEL】sumif関数の連発以外ですっきりした関数

    はじめまして。いろいろ調べましたが、いい方法が見つからなかったので教えてください。EXCEL2002です。 今、以下の表があります。  A     B    C    D    E    F    G    H     I    J 1日付  商品  数量  金額  合計  |日付  商品  数量  金額  合計 2     aaa    3   12,000      |     bbb    4    20,000 3 9/1  bbb    1    5,000  24,000|9/4   ccc   5    17,500  41,500 4     ccc    2    7,000      |     aaa    1    4,000 ----------------------------------------------------------------------- 日付と金額の2~4行目は結合されています。 A~E列のブロックが右に16個あり(今は2個しか書いてませんが)、aaa商品の個数と金額を抽出したいのですが、各ブロックでsumif関数を使い、 16個合計すれば出るのですが、もっとすっきりした関数はありますでしょうか? 実はこの16個のブロックが縦にいくつもあり、関数をかなり入れてるせいかファイルサイズが大きくなってしまってるので。 宜しくお願いします。

  • SUMIF関数のエラーについて

    こんにちわ。教えてください。 会社ごとの請求データが1会社1シートになったExcelで送られてきます。 シートの中には日付別の請求金額が記載されているだけなので、別シートにSumif関数で合計をまとめています。 この合計をまとめるためのシートは、前月分をコピーして使用しているのですが、毎月請求が無い会社もあり、そういう場合はエラーになった会社を探すのに時間がかかってしまいます。 SUMIF関数式を入れたままで、条件の会社が無い場合でもエラーが出ないようにするにはどうしたらよろしいのでしょうか? ちなみに=SUMIF(A物流.csv!S:Y,"自動車",A物流.csv!X:X)という計算式を使用しています。同じファイルの別シートから引っ張ってきています。

  • 【Excel2003】任意の日付だけの合計数を求めたい。

    図が小さくて分かりにくいかもしれません。 日付、店名、商品名、数量を抽出しています。 店名はA店~E店。(実際は50店くらいある) 商品名は「ああ」と「いい」の2種類だけ。 求めたいのは、3/1~3/3、3/4~3/6、3/7~・・・(3日刻みで月末まで)のそれぞれの店の数量合計です。 日付の区切りがなければSUMIFで簡単に出来てしまうのですが、日付で区切ると分からなくなってしまいました。 なにかフラグを立ててやってみようとしたのですが、どうフラグを立てらいいのか知恵が沸きません。 なにかいい方法はないものでしょうか? よろしくお願いします。

  • 指定シートの右にある複数のシートをひとつにまとめる

    指定したシートの右側にある複数のシートをひとつにまとめたい。 例) シートは次のような構成になっています。 (画像を添付しています) ○「あ」シート~「え」シート ⇒ まとめの対象にならないシート ○「まとめ」シート ⇒ データシート「その1」~「その3」シートをまとめたシート ○「その1」シート~「その3」シート ⇒ データシート(ヘッダはすべて同じ) <行ないたいこと> ・「まとめ」シートに、データシートである「その1」「その2」「その3」を  行方向につなげたい  (そのあとにピボットテーブルなどに使えるように) ・データシートは「その4」「その5」・・と増える可能性があるので、  それらにも対応したい <バージョン> ・EXCEL2010 以上になります。 --- 「複数のシート」をまとめる質問・回答はたくさん出ていると思うのですが、 ・ブックの全シートが対象ではない ・対象シートが増えたり減ったりする ということにどのように対応したらよいかわからず 質問させていただきました。 よろしくお願いします。

  • Countifで複数シートを対象範囲にすることはできるか

    表題の件方法ありませんか? できなければあきらめてAccessでやります。 例 シートA、シートBにある「日付」項目(D列2~100) の中で9月17日のレコード数を集計する。。 なお、ひとつのシートでまとめればいいではないかと 思いますが、Excelの限度(65536)を超えてしまうのでできません。シートごとに日付集計の表を作り、 それを3D集計で計算する方法を思い浮かべましたが、 それ以外の迂回手段ありませんか?

  • EXCEL関数

    シートに、 言語  数量 英    1 英    1 中    5 日    4 英    5 中    4 このような表があるとき、英語の行の数量を合計するという 式がよくわかりません。sumifを使うような気もするのですが、わかる方がおられましたら、ご教授願います。

  • エクセル SUMIF?SUMPRODUCT?

    添付画像のような表で、右の表の日付の品番別の合計を表示したいのです。 A2~15にあるL2で、1の行がM1の列を合計する。 ということなのですが、SUMIFでもSUMPRODUCTでも出来そうにありません。 良い方法があったら教えてください。 宜しくお願い致します。

このQ&Aのポイント
  • ぷらら(インターネット接続サービス)のぷららメールに保存してあった送信済メール約3千通以上が、4~5日前に突然削除され、復元してほしい。
  • 富士通デスクトップパソコンのWindows11で、無線LAN接続されている環境でぷららメールを利用しています。
  • 保存されていた送信済メールが削除され、現在は新しいメールが40通余りだけ送信済メールとして残っています。復元をお願いします。
回答を見る

専門家に質問してみよう