• 締切済み

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))で参照できるのですが・・・・ 恐らく、複数シートに設定した時の連続した範囲の「:」の扱い方に問題があるのじゃないかと思うのですがどなたか教えてください。 ちなみに、ピボットテーブルを利用する方法は、想定していません。

  • csny
  • お礼率51% (20/39)

みんなの回答

回答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

  • 別シートで利用している関数を使って、関数の一部分だけを変更したいのです

    別シートで利用している関数を使って、関数の一部分だけを変更したいのですが、 どのようにすればできるのかわかりません。教えてください。 (イメージ) Sheet1 A1セル: 1 ←Aとする A2セル: 2 ←Bとする A3セル: 3 ←Cとする B1セル: =SUM(A1:A3) Sheet2 A1セル: 4 ←Dとする A2セル: 5 ←Eとする A3セル: 8 ←Fとする。 やりたいこと Sheet2_C1セルに、Sheet1_B1セル「 =SUM(A1:A3) 」 (意味:A+B+C)の関数をコピーして、その関数のA1(意味:A) 部分をSheet2_A1のDに変更したい。 ∴Sheet2_C1セルには、( =(D+B+C) )という計算式になり、結果である数値(9)を表示させたい。 (実際には、IF文でちょっとややこしいのですが、イメージはこんな感じです) 現象 (1)Sheet2_C1で「 =SUM( 」としてSheet1_B1をダブルクリック。 Sheet2_C1に、 「 =SUM(Sheet1!B1) 」と表示される。 こうなると、どうやって関数を変更することができるのでしょうか? 関数については、ほとんど皆無に等しい知識しかなく、やればやるほど混乱しています。 質問の説明が悪くて理解しづらいかもしれませんが、ご教示いただけると助かります。 よろしくお願いします。

  • エクセル2003 #N/A含む複数シート数値合計

    複数のワークシートの数値の合計がうまく出ません。 A,B,C,Dという名前のシートのセルA2の数値の合計を 「集計」というシートのセルA3に出したいのですが (ちなみにA,B,C,DシートのセルA2にはvlookup関数がはいってます) 例えばシートBのセルA2の表示が#N/Aだと sum、sumif関数で合計を出そうとしても 「集計」シートのセルA3には#valueと出てしまいます。 うまく#N/Aをのぞいて数値の合計値を出す方法はありますか?

  • エクセル 複数シートの同一セルを別シートへ集計

    エクセルで複数sheetの同一セルを集計sheetへコピーしてきて一覧にし、集計するという作業を行なっています。 1~20のsheet(sheet数sheet名は変動します)を作り、一番右側に集計sheetがあります。 集計sheetのA5へsheet1のF10、A6へsheet2のF10・・・(内容は文字列) 集計sheetのB5へsheet1のG10、B6へsheet2のG10・・・(内容は数値) とコピーしていき、B30にはB5~B29の合計がSUM関数で入っています。 VBAで、集計sheetから左側のsheetの指定セルを一気に集計sheetへコピーしてくる方法はないでしょうか。 ただし集計sheetから左側のsheet21とsheet22は集計に入れたくないという式も教えて頂きたいです。 お時間のある方、ご教授下さい。 または別の質問で参考になるようなものがあればアドレスを教えて下さい。 説明が下手で申し訳ないですが、どうぞよろしくお願いします。

  • エクセルでA1セルの下(A3)を関数で指定させたい

    関数でA1の下(A3)を指定させたいのですが、どのようにしたらいいでしょうか? シート1からシート2への串刺しです。 簡単だと思っていたのですが、できなかったです。 わかりづらいですが、 A1セルに =シート1!A2としてA2を参照していますが、 C1セルに シート1のA3セルを表示するようにしたいのです。 どなたか教えてください。よろしくお願いします。

  • Excelで関数の参照先をセルの値で指定するには?

    Excel2000を使用しています。 関数が参照するセルを指定する場合、例えばSUM、のとき。 セルA1には"B1"と入力されており、 同様にセルA2には"B5"が入力されていたとして(もちろん " は実際には入力されてません)、 この セルA1 と A2 のテキストデータを参照して、SUM(B1:B5) を得るにはどのように範囲を指定したらよいのでしょうか? 別にセルA1 と A2 が "B1" 及び "B5" でなくてそれに代わるものでも構いません。 要は関数が参照するセルをほかのセルの値で指定したいのですが。

  • 関数を使わないでそのセルに出力する方法

    ある計算式が入ったセルがあったとして、その計算された値(見かけ上の数値)をどこか別のセル(空白のセル)に返す方法をご存知でしたら教えてください。 返したいセルには関数すら入れないという方法でやりたいので、マクロを使うしかないと思うのですが、どのようなマクロを作ればよいのか見当が付かないのです(計算されてきた見かけ上の値を参照してどっかに出力する方法などあるのでしょうか)。 例えば↓みたいな感じ   A   B    C       D 1  10  10  =SUM(A1:B1) C1のセルは見かけ「20」となりますが、実際には「=SUM(A1:B1)」となっています。この「20」をD1にそのまま抽出したいと考えています(D1のセルには何も関数を入れないで、見かけ上も実際に入っている数値も「20」としたいのです) 関数だけでは無理ですよね?

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

  • SUMIF関数で複数のブックを参照する方法

    A列に1~20の数値がランダムに入っていて、B列~Z列はそれぞれ1~20に対する数値が入っています。 それを数値1項目のB~Zの各々の集計、同2のB~Z、と20までB~Zそれぞれの集計を出すブックを作成しています。 その関数自体はSUMIFでできるをことを教えていただいたのですが、 その集計は複数のブックにまたがっており、その全てからA列の数値を参照しなければならなくなりました。 ブック001のセル01、ブック002のセル01・・・ブック012のセル01、 同様にブック001のセル02、ブック002のセル02・・・ブック012のセル02、といった具合です。 関数で処理することはできるのでしょうか? よろしくお願いいたします。

  • Excelセル参照でシート見出し指定

    一例として、1月から12月までのシートが作ってあり、もう1枚別の集計用シート内で =VLOOKUP(B9,'10月'!$A$1:$D$10,2,FALSE) というような式を入れれば10月のシートから指定の内容を拾ってきますが、 集計用シートのB1に「9」と入れると、上記の式で自動的にB1セルを参照して9月のシートを指定する、というようなことはできるでしょうか。 よろしくお願いいたします。

  • シート名を計算式に反映させる方法

    お世話になります。 エクセル2003で、毎日の日報を作成しており、日ごとに1シートを使用しています。B1セルには日付が入り、シート名はその日付と連動させています。その中で、当日までの売り上げの累計欄があり、その計算方法は串刺し計算で、日々のシートの前後に「Top」と「End]というシートを作り、例えばA1セルに当日の売り上げを入力するとすれば、A2セルに「=SUM(Top:End!A1)」と入力して、「Top」から「End」の合計を出しています。 ところがこの方法では、日付を遡って日報を出したい場合は、Endシートまでの合計が、遡った日付のシートでも計算されてしまうので、これを解決しようと思い、B1セルの日付データを使って =SUM('Top:text(B1,m月d日)'!A1) と入力してtopシートから当日までの串刺しをしようとしてみたのですが、=SUM('Top:[text(B1,m月d日)]text(B1,m月d日)'!A1)という式に自動的に変わってしまいできません。どのようにすればよいのでしょうか。マクロは使わない方向で、できればよろしくお願いいたします。

専門家に質問してみよう