回答No.2です。
>StartシートD2~
>=IF(ISERROR(INDIRECT($C2&"!G30")),"",INDIRECT($C2&"!G30"))
> ↑A1=G30にかえました
はい、それでOKです。
>累計セルに
>=IF(COUNTIF(Start!$C:$C,REPLACE(CELL("filename",G30),1,FIND("]",CELL("filename",G30),FIND(".xls",CELL("filename",G30))),)),SUM(Start!$D$2:INDEX(Start!$D:$D,MATCH(REPLACE(CELL("filename",G30),1,FIND("]",CELL("filename",G30),FIND(".xls",CELL("filename",G30))),),Start!$C:$C,0))),"")
> ↑これもA1=G30にかえただけです
いえ、その様に変更された場合でも問題なく動作は致しますが、この式は「参照先(この場合はA1セル)のセルが存在しているシートのシート名」を取得して、その取得したシート名を基にして計算処理を行っているものなのですから、参照先のセルがA1セルであろうと、G30セルであろうと、或いはIV65536セルであろうと、同じ結果となります。
ですから、累計セルに入力する関数中の参照先のセルを変更する必要は御座いません。
一番良いのは、A1セルではなく、累計セル自体を参照先とした(「A1」の代わりに「累計セルのセル番号」を入れる)方が、この関数を累計セルよりも上の行にコピーする場合や、参照先であるA1セル(或いはG30セル)を削除してしまった際に、エラーとなってしまう事を避ける事が出来るため、問題が発生する恐れが少なくなるのですが、御質問文中には「累計セルのセル番号」が記載されていなかったため、取り敢えず仮の話として、A1セルを参照先としただけです。
>…としましたが、累計が表示されませんでした。
今現在において、私が思いつく事が出来た、原因となる可能性がある事柄は2つあります。
まず、累計セルの中の
CELL("filename",G30)
の部分は、参照先のセル(この場合はG30セル)が存在しているExcel book(Excelファイル)が保存済みの場合においてのみ動作するものであり、新規に作成している途中の、1度も保存が行われていないExcel book上では動作致しません。
ですから、もしも、質問者様が、上記の関数の動作確認を、もしも、新規に作成されたばかりのbook上で行われていた場合には、累計結果は表示されません。
パソコンのディスク内のどこか適当な所に、一度保存してみられて、累計が表示されるか否かを御確認願います。
原因の候補の2つ目は、StartシートのC列に入力されたシート名が、実際のシート名とは異なっているという可能性です。
例えば、実際のシート名とStartシートのC列に入力されている文字列が、一方は半角文字で記述されているのに対し、もう一方は全角文字で記述されていた場合とか、
StartシートのC列にシート名を入力する際に、文字列の先頭に「'」を付けていなかったり、
一見すると同一の文字列に見えてはいたとしても、片方には数字の他にも空白や改行記号等の目には見えない文字が含まれていた場合、
等々、些細な違いによって、StartシートのC列中には、該当するシート名が入力されていないとExcelに判定されてしまっているのかも知れません。
ですから、StartシートのD列に1~31の各シートのG30セルの値が表示されているのか否かを御確認願います。
もし、1~31の各シートのG30セルが空欄やエラーではない場合であっても、各G30セルの値がStartシートのD列に表示されていない場合には、StartシートのC列に入力されたシート名が、実際のものとは異なっている事が原因であると思われますので、StartシートのC列にシート名を入力し直す必要が生じます。
>作成した日報には累計したい項目(セル)が複数あります。
>続いてG31を累計する場合、StartシートのE列にそれぞれの数字(売上の場合は1日ごとの売上金額)が入るように1枚のシートで完結させることは可能でしょうか。
それでしたら、まず、回答No.2の添付画像中においては
A1の値
と表示されているStartシートのD1セルに
G30
と入力し、同様に、StartシートのE1セルには
G31
と入力して下さい。
次に、StartシートのD2セルに次の関数を入力して下さい。
=IF(ISERROR(1/(INDIRECT($C2&"!"&D$1)<>"")),"",INDIRECT($C2&"!"&D$1))
次に、StartシートのD2セルをコピーして、StartシートのD2~E32の範囲に貼り付けて下さい。
次に、1のシートを選択してから、Shiftキーを押しながら31のシートのシートタブをクリックする事で、1~31のシートをまとめて選択してから、「G30セルの値の毎日の累計を表示させるセル」を選択し、そこに次の関数を入力して下さい。
=IF(COUNTIF(Start!$C:$C,REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),))*COUNTIF(Start!$D$1:$E$1,SUBSTITUTE(CELL("address",G30),"$",)),SUM(INDIRECT("Start!R"&ROW(Start!$C$1)+1&":R"&MATCH(REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),),Start!$C:$C,0)&"C"&MATCH(SUBSTITUTE(CELL("address",G30),"$",),Start!$D$1:$E$1,0)+COLUMN(Start!$C$1),FALSE)),"")
次に、同じく1~31のシートをまとめて選択している状態のままで、「G31セルの値の毎日の累計を表示させるセル」を選択し、そこに次の関数を入力して下さい。
=IF(COUNTIF(Start!$C:$C,REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),))*COUNTIF(Start!$D$1:$E$1,SUBSTITUTE(CELL("address",G31),"$",)),SUM(INDIRECT("Start!R"&ROW(Start!$C$1)+1&":R"&MATCH(REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),),Start!$C:$C,0)&"C"&MATCH(SUBSTITUTE(CELL("address",G31),"$",),Start!$D$1:$E$1,0)+COLUMN(Start!$C$1),FALSE)),"")
因みに、「G30セルの値の毎日の累計を表示させるセル」に入力する関数と「G30セルの値の毎日の累計を表示させるセル」に入力する関数の違いは、「CELL("address",」の次に来る参照先のセル番号が、G30であるのかG31であるのかの違いだけです。(ですから、もし、「G30セルの値の毎日の累計を表示させるセル」と「G30セルの値の毎日の累計を表示させるセル」が、同じ列の中で連続して並んでいる場合には、「G30セルの値の毎日の累計を表示させるセル」オートフィルでコピーする事でも入力する事が可能です)
次に、StartシートやEndシート等の、「1~31以外の適当なシート」を開く事で、「1~31のシートがまとめて選択されている状態」を解除して下さい。
以上です。
後それから、別の方法として、作業列としてStartシートのC列のみを使用し、StartシートのD列~E列は使用しないで済む方法を考え付いたのですが、今はちょっと、そこまでの回答文を入力している暇が無くなって来ましたので、残りは又後で(昼の12時半頃か、それが無理なら17時以降)回答させて頂きます。
お礼
同じ悩みでこのページに辿り着いた方へ… 僕はEndシートを使う方法でうまくいきました。 ベストアンサーは回答4ですが、最初のStartシートにも入力が必要です。 Endシートを使う方法を採用する場合は 回答2(StartシートのC列のみ使用)と 回答4(EndシートのA列B列と各シートの累計セル) を参照してください。 役に立てたら幸いです。