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

このQ&Aのポイント
  • エクセル2003で日報を作成しており、売り上げの累計欄を計算する方法について質問です。
  • 日ごとに1シートを使用し、B1セルに日付を入力し、シート名と連動させています。
  • 現在は串刺し計算を使って累計を出しているのですが、遡った日付のシートでも計算されてしまいます。どのように解決すれば良いでしょうか?
回答を見る
  • ベストアンサー

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

お世話になります。 エクセル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)という式に自動的に変わってしまいできません。どのようにすればよいのでしょうか。マクロは使わない方向で、できればよろしくお願いいたします。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

シートの串刺しでその様な指定は出来なかったと思います。 発想を変えましょう。 最初のシートだけはA2セルに =A1 と入れ、 二日目以降のシートはA2セルに =INDIRECT(TEXT(B1-1,"m月d日")&"!A2")+A1 と、入れてみてください。 これでA2には、前日のシートのA2の値(前日までの売り上げ)+本日の売り上げが入ります。 但し、この方法ですとシートは毎日必要になります。休日で日報が不要な日の分もシートを用意して置いてください。

suikaman
質問者

お礼

なるほど!というご回答を頂き、ありがとうございました。発送の転換ですね。しかし、最初のシートだけA2セルを違う式にしておくというところがちょっとネックで、そうすると、月の初日でもシートは2つ存在することになり(そうしないと毎回この計算式を2日目にいれなければならない)、ちょっと問題がある(うちのシステム上)なんですが、ご回答を参考にもう少し考えてみます。本当にありがとうございました。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

失礼! 誤:それでしたら、B2の式を↓でどうでしょう。 正:それでしたら、A2の式を↓でどうでしょう。

suikaman
質問者

お礼

お礼が遅くなりました。 完璧ですね。私も知っているはずの関数ですが、思いつきませんでした。すばらしい知識をありがとうございました。お世話になりました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

No.1です。 累計は月単位なんですね? それでしたら、B2の式を↓でどうでしょう。 =IF(DAY(B1)=1,A1,INDIRECT(TEXT(B1-1,"m月d日")&"!A2")+A1)

関連するQ&A

  • 【Excel】串刺し計算オートフィルの結果が不正

    Excelで、月毎に各店の売上の合計を出そうとしています。 例えば4月のブックで、A店・B店…E店の各店5つのシートと、全店の合計のシート、全部で6つのシートがあるとします。 そしてそれぞれのシートは、縦方向に日付、横方向に商品名が並ぶ表形式になっています。 ここで、各シートは行数・列数、そして配置が全く同じですので、合計のシートにその日その商品の全店の売上を、所謂串刺し計算で出すことができます。 例えばB2のセル…日付は1日、商品名はaで、 売上はA店、B店…の順に 500、600、700、800、900 となっています。 すると合計のシートのセルB2に、5店の売り上げを串刺し計算すると、 合計は3,500になると思います。 では、B3のセル、日付は2日で商品名は同じくaです。 売上は1,000、900、800、700、600です。 合計のシートのセルB3に串刺し計算すると、4,000円になる筈です。 また、C2のセル、日付は同じく1日で、商品名はbとします。 売上は300、500、700、900、1,000です。 合計のシートのセルC2に串刺し計算すると、3,400円になりますね。 でもここで、オートフィルという便利な機能があります。 合計のシートで、オートフィルを行うことによって、全店の各日・各商品毎の合計を一気に計算することができます。 串刺し計算した結果も、ちゃんと連続データで出てくる筈です。 それが…4月のブックでそれをやると、表示される計算結果が不正になるのです。 即ち、上記の例から、合計シートのセルB2から縦方向にオートフィルしても、横方向にオートフィルしても、全て3,500と表示されてしまうのです。 ただ、数式だけはちゃんとなっているのですが… 合計シートのセルB2には =SUM(A店:E店!B2) と数式が入っています。 では、B3には =SUM(A店:E店!B3) C2には =SUM(A店:E店!C2) と入っているんです。 なのに計算結果が不正になっている… 1ヶ所のセルに入っている数式をコピーして、他のセルにペーストしても、数式だけは正しいのに計算結果は正しくありません。 逆に、各セル1ヶ所1ヶ所串刺し計算すると、計算結果が正常に出てきます。 つまり数式をコピーすると不正扱いされるということです。 今、4月のブックでこの現象が起きています。 過去の月のブックでは、同じ操作を行って、計算結果は正常に出たのですが… 何故、今に限ってこうなるのでしょうか… Excel2010で、この現象が起きています。OSはWin7です。 また、問題のシートは全て、2003以前のバージョンで作るようなブック形式です。 何方か教えて頂けますでしょうか? 不足がありましたら補足します。

  • 串刺し計算方法

    質問です。 串刺し計算方法で、 Sheet1のA4にSheet2~sheet5のA4の合計を出すのは、sheet1のA4のセルでオートサムを使用して行えばいいのですよね? それではSheet1のB5のセルにsheet2~5のA4の合計を計算させるためにはどのようにすればいいのでしょうか?

  • エクセルの営業日報で累計を残す方法

    エクセル初心者です。 エクセルで一か月分の営業日報をつくりました。 当日売上と当月累計等が横並びになっていてるものです。 シートを1枚作り、1日を31日までコピーし、1,2,3,4~31となっています。 完成した日報の累計は串刺し算でもとめています。   例:売上累計は=SUM(Start:End!A1) この計算だと、たとえば15日まで記入した場合、10日の売上累計を確認したくても 1~31すべての累計が同じ数字になっていて見返すことができません。 毎日の累計を残したい場合はどのような対策が有効でしょうか?? ※マクロも少し(シートを「1」作り、シート名「1」~「31」でコピー)だけですが挑戦しました(汗)

  • エクセル(マクロ)で累計部分を更新しながらシートを

    日報作成をマクロで自動化する方法を探しています。 とりあえずできたのは、 1:「1日」シートを作り、セルA1には日付「2015年9月1日」を入力。 2:「1日」シートをコピーして「2日」シートを作成し、セルA1の日付を「2015年9月2日」に変更。 3:2の作業を「31日」シートまで繰り返す。 というところまでです。 (1つのワークブックに、「1日」~「31日」までのシートがある状態です。) これに加えて、たとえば、セルB1に当日売上を入力すると、 セルB2に月累計が出るようにしたいのです。 試してみたのは、「1日」シートのセルB2に「=B1」と入力し、 「2日」~「31日」シートのB2に =INDIRECT(TEXT(A1-1,"1日")&"!B2")+B1 と入力してみましたが、これだと月累計ではなく「1日」シートのみとの合計になってしまい、 「3日」~「31日」シートでは、数式内のシート名"1日"の部分を 手動で更新していかなければなりません。 数式内のシート名を翌日の日付に変更しながらシートをコピーする方法はありますか? または、 B2=前日シートのB2+当日シートのB1 となる数式は無いでしょうか?? ちなみに今マクロで使っているのは下記のコードです。 ——————————— Sub 日報作成() Dim firstDay As Date firstDay = InputBox("日報", "最初の日付を指定", Date) '最初のシートの日付を指定 Worksheets("1日").Range("A1") = firstDay Dim i As Integer For i = 1 To 30 Worksheets("1日").Copy after:=Worksheets(Worksheets.Count) '1日のコピーを末尾に作る Worksheets(Worksheets.Count).Name = i + 1 & "日" 'コピーしたシートの名前を変える Range("A1").Value = DateAdd("d", i, firstDay) '日付を一日ずつ足していく Next i End Sub ――――――――――― 似たようなデータを毎月大量に作るので、どうにか効率化できたらと思っています。 ちなみに、わたしはプログラミングCを少しかじったことがありますが、 マクロを使うのは初で、上記もネットで見つけたコードを少しいじった程度です、、 詳しい方がいらしたら教えてください。 よろしくお願いいたします。

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

  • エクセルでファイル名やシート名をセルに入力して計算式に反映させたい。

    100のシートが存在するデータ専用のファイルが10個あります。 そしてそれらをリンクしながら計算する専用ファイルがあります。 ='C:\data\[001.xls]001 (17)'!A1*B1*C1+D1 というような感じで何千もの計算式がそのファイルにはあるんですが、各ファイルの各シート毎に計算をしなければなりません。 ファイル用セルに002、シート用セルに003と打てば ='C:\data\[002.xls]003 (17)'!A1*B1*C1+D1 というような感じですべての計算式が変更になるなんてことは不可能でしょうか? また不可能でしたらこのように膨大な量のデータを扱う場合のコツといいますか効率がいい方法があったら是非教えてください。 どうか、どうかよろしくお願いします。

  • スプレッドシートでシートをまたいで計算したい

    Googleスプレッドシートで日報を作っています。1シート1日とし、最初の1シート目にそれまでの合計(例えば18日だったら1日~18日までの合計)が計算されるようにしたいと考えています 合計(1シート目)現在の日までの合計表示 1日(2シート目)1日目の数値 2日(3シート目)2日目の数値と1日目と2日目の数値の合計 3日(4シート目)3日目の数値と1日目~3日目の数値の合計 4日(5シート目)4日目の数値と1日目~4日目の数値の合計 . . といった感じです。上の説明で4日目の「1日目~4日目の数値の合計」などの計算させるとき各シートの該当セルを一つづつ呼び出せば表示されますが、30日目の「1日目~30日目の合計」となるととてつもなく面倒になってしまいました。項目は固定で「売上・利益・交通費・人件費」などになります。 function sumSkicount(cell_no, start_name, end_name) { var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); var sum = 0; var add_flag = false; for(var i = 0; i < sheets.length;i++) { if(sheets[i].getName() == start_name){add_flag = true;} if(add_flag){ if(isNaN(sheets[i].getRange(cell_no).getValue())){ value = 0; }else{ value = parseInt(sheets[i].getRange(cell_no).getValue()); } sum = parseInt(sum) + value; } if(sheets[i].getName() == end_name){break;} } return sum; } のコードを書き「1日目~4日目の数値の合計」などを計算させたいセルにsumSkicount(cell_no, start_name, end_name) を入れ計算させましたが、うまく動きませんでした。 cell_no→計算させたいセル start_name→始まりのシート end_name→終わりのシート どなたかご指摘アドバイスいただけると非常にありがたいです。よろしくお願いいたします。

  • Excel 計算式を別シートで計算表示させる

    所定のSheetにある数値を別SheetにてVLOOKUP等で数値表示させる事はできます。 Sheet1のセルにある計算式をSheet2のセルより数値ではなくSheet1計算式を使って計算して数値表示させたい。 よろしくお願いします。 Sheet1 A B C D 2 3 5 10 D1に=A1+B1+C1の計算式 Sheet1 A B C D 1 2 5 8 D1にSheet1=A1+B1+C1の計算式を使って表示

  • Excelでワークシートの計算式の反映方法

    エクセルで1つのワークシート内で計算式を入力して計算していく方法は分かります。その結果を次のワークシートへ反映させる方法があったら教えて頂きたいのです。 例えば1枚目のシート(sheet1)でC1セルに「=A1+B1」の計算式を入れて答えが出ますよね。 そのC1セルに出た答えを2枚目の(sheet2)のA1セルに反映させる(表示させる)方法を知りたいのです。 ヘルプで検索しても思うようにいきません。 もしご存知でしたらよろしくお願い致します。

  • AccessVBAからExcelシート名を操作

    Access2003を使用しています。 AccessVBAで、日報のようなExcelを操作しようとしています。 シート名は日付で、当日シートをコピーし、翌日シートにデータを流し込むというものです。 当日シートをコピーし、新たなシートを翌日にリネームするところまではできていますが、 元シート名(当日)に(2)が残ってしまいます。 ※必ず一つ前のシートをコピーするという条件でも可です。 ※コピー元のシートに(2)は既に存在する場合がありますが、必ず日付のみのシートが存在します。 元シート名を変えずにコピーする、または元シート名(一つ前のシート)をリネームする方法があればご教示いただきたいと思います。 --------------------------------------------------- Dim xlApp As Object Dim xlSheet As Object Dim stFileName As String Dim stSheetName1 As String Dim stSheetName11 As String Dim xlBook1 As Object stSheetName1 = DatePart("d", DateAdd("d", -1, [Forms]![日報]![対象日]))  '今日 stSheetName11 = DatePart("d", [Forms]![日報]![対象日])  '対象日(明日) 'Excel展開 Set xlApp = Excel.Application Set xlBook = xlApp1.Workbooks.Open(Forms![日報作成フォーム]![日報1]) 'ファイル名 'シートコピー Set xlSheet = xlBook.Worksheets(stSheetName1) xlSheet.Copy , xlBook.Worksheets(stSheetName1) 'シート名変更 xlSheet.Name = DatePart("d", [Forms]![日報]![対象日]) '対象日(明日) xlApp.Worksheets(stSheetName11).Select MsgBox "コピー完了" End Sub

専門家に質問してみよう