• 締切済み

indirect 関数を使った複数シートの範囲指定方法

エクセルでindirect 関数を使って作成してますが次のように出来ませんので、どなたか教えてください。 質問を検索してましたが見つけることが出来ませんでした。 以前の回答に同内容の回答があればそれを教えていただけるだけでも助かります。 12枚(1年分)の同一シートが、4月から3月まであります。(シート名は、それぞれ4,5,6・・・3と数字のみです) 別の集計シートに各シートの同座標のセルの集計を串刺し計算で行うと、=sum('4:3'!d20)でいいのですが、indirect関数で 別セルにそれぞれ A1=「4」B1=「3」(可変にして)を入力して参照した結果を求めたいのです。 '4:3'の部分を INDIRECT(A1&":"&B1&"!" & D20)) 等色々試しましたがどうしてもうまくいきません。 (#REF!となったりする) 単シートだけで有れば、=SUM(INDIRECT(A1&"!" & D20))で参照できるのですが・・・・ 恐らく、複数シートに設定した時の連続した範囲の「:」の扱い方に問題があるのじゃないかと思うのですがどなたか教えてください。 ちなみに、ピボットテーブルを利用する方法は、想定していません。

みんなの回答

回答No.6

#2です。 もう少し深く調査しましたが、’4:3’をindirect含め他の関数であらわすのは、できそうでできなさそうです。 私の方法が決してベストではありませんが、各シートの合計を集めるだけですので、最初の手間だけで集計項目がいくらあっても一枚のシートで表現できると思います。 また、コメントにありますファイル容量はそれほど増えないと思います。 また、4月から3月というのも計算を複雑にしています。 暦月でなく会計月(3月→第1会計月)とすれば、1から12まで並びますので、もう少しスッキリ処理できると思いますが。 (一般の人には抵抗あるかもしれませんが)

csny
質問者

補足

やはりダメですか?・・・ ’4:3’という単純な部分ですが色々その後も試したんですが出来ないようですね。 ご回答のように会計月などすればいいのですが、 データの調査のパターンが 1 4月から12月・1月から3月・翌年4月と 2 4月から2月・3・4月 と 同じデータで集計パターンがありまして・・・ とりあえず、ダイレクトに’4:12’・・・ という単純な串刺し演算の関数で妥協しようかsakuramyloveさんの方法を使わせて頂こうか迷っています。 今回の件で、エクセルに関しての個人的な神話が瓦解してしまいそうで・・ん~それにしても納得がいかないな~

  • engine55
  • ベストアンサー率31% (28/89)
回答No.5

indirectは使わないのですが、 もし、任意の期間の串刺し集計がほしいのであれば、 こんなやり方も考えられます。 (1)4月から3月までの欄を作り、集計を取りたい月に1を入れる。    4 5 6 ~ 2 3      1 1   1 (2)集計シートには、SUMではなく ='4'!(串刺しのセル座標)*$a$2(4月の欄)+'5'!d20*$b$2+…と入力する。(面倒だが、あとはコピーだけ) これなら任意の月期間の集計ができます。月に重みを加えた集計ももちろん可能です。 的はずれかもしれませんが、いかがですか。

  • engine55
  • ベストアンサー率31% (28/89)
回答No.4

私も試してみましたが、 どうも串刺しのところで引っかかるようです。 もしどうしても関数だけで処理するとなれば、範囲に名前を付けるしかなさそうです。 (あまり楽にはなりませんが……) 集計箇所が多数あるのであれば マクロで処理するか、ピボットテーブル、 あるいはツール→統合あたりでの処理になるのでは。 と書いたところで、2さんのやり方のD20のところをいじれるようにすれば、他の項目の合計もとれることに気がつきました。この方が楽だと思います。

csny
質問者

補足

やはり串刺しにネックがありそうですね。 エクセルで出来ないことは無いと言う事を 実践したくて今回のファイルはあえてマクロやPBT等を使わない仕様で作成したかったのですが・・・ 単シート=OK 串刺し=NG という単純な部分でしたので関数で解決できそうだと感じたのですが・・・

  • engine55
  • ベストアンサー率31% (28/89)
回答No.3

シート名の数字は半角ですか? 別セルのはいじってなければ半角扱いになるので そのへんはどうですか? いずれにしてもシート名がカギのような気がします。

csny
質問者

補足

シート名は半角、他のセルの内容も全て半角にしてます。 その点も質問前に全てやってみたんですが・・・ やはり範囲指定方法とindirect関数の関係でしょうか?

回答No.2

串刺し計算を直接INDIRECT関数であらわすのは難しいのではないかと思います。 次善の策として、以下の方法ではだめでしょうか。 【手順】 別シートを用意し、以下の手順で式を完成させる。 (1)各月のシートの合計を集めるため、C列に暦月を入力 C1=4 C2=5 C3=6 ・・・ C12=3 (2)D列に各月のシートの合計を入力 D1=INDIRECT("'"&C1&"'!D20") 上記式をD12までコピー貼り付け (D1は、='4'!D20でもかまわないが、入力するのが面倒なのでINDIRECTを使用) (3)D列の最後に合計行を設ける D13=SUM(INDIRECT("D"&IF(A1>3,A1-3,A1+9)):INDIRECT("D"&(IF(B1>3,B1-3,B1+9)))) (4)A1=開始月、B2=終了月とする。 開始月と終了月は範囲であるので、逆転(開始6月、終了4月)としてもD13には正しく合計が計算されます。

csny
質問者

補足

残念ながら、集計項目が多数あって、ひとつの集計で教えていただいた方法を行うとかなりファイルの容量が増えるので・・・ もともと、串刺しの =sum('4:3'D20) の ’4:3’は 文字列ではないのでしょうか? 出来そうな気がするのですが・・・

  • engine55
  • ベストアンサー率31% (28/89)
回答No.1

INDIRECT(A1&":"&B1&"!" & D20))を INDIRECT("'"&A1&":"&B1&"'!" & D20))では だめですか?

csny
質問者

補足

残念ながら、既に上記の方法もindirect関数の第1引数が「文字列参照」なのでやってみましたが出来ませんでした。他にも ’4:3’を文字列として別セルに入れて参照させましたがだめでした。ありがとうございます。

関連するQ&A