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

このQ&Aのポイント
  • エクセル初心者の方が一か月分の営業日報を作成し、当日売上と当月累計を横並びに表示しています。しかし、累計を計算する際に全ての日の累計が同じ数字になってしまい、特定の日の累計を確認することができません。どのような方法で毎日の累計を残せば良いでしょうか?
  • エクセルの営業日報で累計を残す方法についての質問です。一か月分の売上データを記入し、累計を計算する際に問題が発生しています。特定の日の累計を確認するためにはどうすれば良いでしょうか?エクセル初心者の方にも分かりやすく教えてください。
  • エクセルで営業日報を作成している際に累計を残す方法について質問です。日毎の売上データを記入するだけでなく、特定の日の累計も確認したいと考えています。しかし、現在の計算方法では全ての日の累計が同じ数字になってしまい、特定の日の累計が分かりません。どのような対策を取れば良いでしょうか?エクセル初心者の方にもわかりやすく教えてください。
回答を見る
  • ベストアンサー

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

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

  • ytyd
  • お礼率87% (7/8)

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答No. 3で触れた、1~31シート上のG30セルの値やG31の値を、一々、1枚のシート上に抽出せずとも済む方法です。  尚、 >作業列としてStartシートのC列のみを使用し、StartシートのD列~E列は使用しないで と述べましたが、実際に試してみました処、作業列を2列使用した方が良い事が判りましたので、EndシートのA列~B列を作業列として使用する事に致しました。  まず、Endシートの A2セルに   Start A3セルに   '1 A4セルに   '2 A5セルに   '3 A6セルに   '4 A7セルに   '5 A8セルに   '6 A9セルに   '7 A10セルに   '8 A11セルに   '9 A12セルに   '10 A13セルに   '11 A14セルに   '12 A15セルに   '13 A16セルに   '14 A17セルに   '15 A18セルに   '16 A19セルに   '17 A20セルに   '18 A21セルに   '19 A22セルに   '20 A23セルに   '21 A24セルに   '22 A25セルに   '23 A26セルに   '24 A27セルに   '25 A28セルに   '26 A29セルに   '27 A30セルに   '28 A31セルに   '29 A32セルに   '30 A33セルに   '31 という具合に、Start~31シートのシート名を、シートが並んでいる順番通りに入力して下さい。(「'」を忘れずに付けて下さい。尚、Startシートのシート名に関しては「'」が付いていても居なくとも、どちらでも構いません)  尚、この場合、「'」は表示には現れませんので、例えばEndシートのA3セルの場合、データ自体は「'1」ですが、表示上は「1」と表示されます。  次に、EndシートのB2セルに次の関数を入力して下さい。 =IF(ISERROR(INDIRECT("'"&$A2&"'!A1")),"",COUNT(B$1:B1)+1)  次に、EndシートのB2セルをコピーして、EndシートのB3~B33の範囲に貼り付けて下さい。(EndシートのB2セルを選択してから、選択範囲を示す黒い太枠の右下の隅にある黒点をダブルクリックする事でもB3~B33の範囲に複写する事が出来ます)  次に、1のシートを選択してから、Shiftキーを押しながら31のシートのシートタブをクリックする事で、1~31のシートがまとめて選択されている状態とし、その状態のままで「G30セルの値の毎日の累計を表示させるセル」を選択し、そこに次の関数を入力して下さい。 =IF(COUNTIF(End!$A:$A,REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),)),INDIRECT("'"&LOOKUP(VLOOKUP(REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),),End!$A:$B,2,FALSE)-1,End!$B$1:$B$33,End!$A$1:$A$33)&"'!RC",FALSE)+IF(ISNUMBER(G30),G30,0),"")  次に、同じく1~31のシートをまとめて選択している状態のままで、「G31セルの値の毎日の累計を表示させるセル」を選択し、そこに次の関数を入力して下さい。 =IF(COUNTIF(End!$A:$A,REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),)),INDIRECT("'"&LOOKUP(VLOOKUP(REPLACE(CELL("filename",$A$1),1,FIND("]",CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1))),),End!$A:$B,2,FALSE)-1,End!$B$1:$B$33,End!$A$1:$A$33)&"'!RC",FALSE)+IF(ISNUMBER(G31),G31,0),"")  因みに、「G30セルの値の毎日の累計を表示させるセル」に入力する関数と「G30セルの値の毎日の累計を表示させるセル」に入力する関数の違いは、「CELL("address",」の次に来る参照先のセル番号が、G30であるのかG31であるのかの違いだけです。(ですから、もし、「G30セルの値の毎日の累計を表示させるセル」と「G30セルの値の毎日の累計を表示させるセル」が、同じ列の中で連続して並んでいる場合には、「G30セルの値の毎日の累計を表示させるセル」をオートフィル等を用いてコピーする事でも、「G31セルの値の毎日の累計を表示させるセル」の関数を入力する事が可能です)  次に、StartシートやEndシート等の、「1~31以外の適当なシート」を開く事で、「1~31のシートがまとめて選択されている状態」を解除して下さい。  これで、1~31の各シートに毎日の累計が表示される様になりますし、関数の中のG30やG31の部分を他のセル番号に替えた関数を、1~31の各シートに設定するだけで、他のセルに入力されている数値の累計を表示させる事も出来ます。  但し、この方法では、G30セルやG31セルが未入力となっているシートにおいても、累計値が表示されてしまいます。  ですから、見栄えを良くするために、条件付き書式を設定する事で、G30セルやG31セルが未入力となっているシートの「毎日の累計を表示させるセル」が非表示になる様にされると良いかも知れません。(もし、G30セルやG31セルが未入力となっているシートの見栄えを気にせずとも良い場合には、設定する必要は御座いません)  その条件付き書式の設定方法に関しては、また後で投稿させて頂きます。

ytyd
質問者

お礼

同じ悩みでこのページに辿り着いた方へ… 僕はEndシートを使う方法でうまくいきました。 ベストアンサーは回答4ですが、最初のStartシートにも入力が必要です。 Endシートを使う方法を採用する場合は 回答2(StartシートのC列のみ使用)と 回答4(EndシートのA列B列と各シートの累計セル) を参照してください。 役に立てたら幸いです。

その他の回答 (7)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.8

続けておじゃまします。 お礼欄・補足欄読みました! ものすごく頑張られましたね! こんなに項目があるとは驚きです。 規則性があるようなのでFor~Nextでループさせた方が簡単だと思います。 今一度コードを載せてみます。 Private Sub Workbook_Open() Dim i As Long, k As Long With Worksheets(1) .Range("G30").Resize(38).Copy .Range("L30") .Range("J38").Resize(5).Copy .Range("O38") End With For k = 2 To Worksheets.Count With Worksheets(k) .Range("L30").Resize(38).ClearContents .Range("O38").Resize(5).ClearContents If k < Day(Date) Then For i = 30 To 67 .Cells(i, "L") = Worksheets(k - 1).Cells(i, "L") + .Cells(i, "G") Next i For i = 38 To 42 .Cells(i, "O") = Worksheets(k - 1).Cells(i, "O") + .Cells(i, "J") Next i End If End With Next k End Sub ※ 検証はしていませんが、おそらくこんなコトではないでしょうか? 今回はすべてのSheetのL列・O列データを消すようにしています。m(_ _)m

ytyd
質問者

お礼

おお!!!! こんなコトです!!!! 結構複雑なつくりのフォーマットで日報を作ってしまったので、少し数字をずらす必要がありましたが、ドンピシャです。 ベストアンサー一人しかつけられない設定が憎くて仕方がないのですが、とても感謝しています!!お許しください。 マクロで動かすことの快適さを教えていただいたことも同時に感謝しております。 勉強します!!ありがとうございました!!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.1・6です! たびたびごめんなさい。 前回のコードでは仮に「本日」が1日・2日の場合 本日Sheetまで累計が表示されてしまいますので、 ↓のコードに変更してください。 Private Sub Workbook_Open() Dim k As Long If Day(Date) > 2 Then '「今日」が3日以降であれば With Worksheets(1) '「1」Sheetのみの操作 .Range("B4") = .Range("B3") .Range("C4") = .Range("C3") .Range("D4") = .Range("D3") End With For k = 2 To Day(Date) - 1 With Worksheets(k) .Range("B4") = Worksheets(k - 1).Range("B4") + .Range("B3") .Range("C4") = Worksheets(k - 1).Range("C4") + .Range("C3") .Range("D4") = Worksheets(k - 1).Range("D4") + .Range("D3") End With Next k End If End Sub ※ Sheetのレイアウトは前回の画像通りとします。 何度も失礼しました。m(_ _)m

ytyd
質問者

お礼

For k = 2 To Day(Date) - 1 With Worksheets(k) .Range("L30") = Worksheets(k - 1).Range("L30") + .Range("G30") .Range("L31") = Worksheets(k - 1).Range("L31") + .Range("G31") .Range("L32") = Worksheets(k - 1).Range("L32") + .Range("G32") .Range("L33") = Worksheets(k - 1).Range("L33") + .Range("G33") .Range("L34") = Worksheets(k - 1).Range("L34") + .Range("G34") .Range("L35") = Worksheets(k - 1).Range("L35") + .Range("G35") .Range("L36") = Worksheets(k - 1).Range("L36") + .Range("G36") .Range("L37") = Worksheets(k - 1).Range("L37") + .Range("G37") .Range("O38") = Worksheets(k - 1).Range("O38") + .Range("J38") .Range("O39") = Worksheets(k - 1).Range("O39") + .Range("J39") .Range("O40") = Worksheets(k - 1).Range("O40") + .Range("J40") .Range("O41") = Worksheets(k - 1).Range("O41") + .Range("J41") .Range("O42") = Worksheets(k - 1).Range("O42") + .Range("J42") .Range("L38") = Worksheets(k - 1).Range("L38") + .Range("G38") .Range("L39") = Worksheets(k - 1).Range("L39") + .Range("G39") .Range("L40") = Worksheets(k - 1).Range("L40") + .Range("G40") .Range("L41") = Worksheets(k - 1).Range("L41") + .Range("G41") .Range("L42") = Worksheets(k - 1).Range("L42") + .Range("G42") .Range("L43") = Worksheets(k - 1).Range("L43") + .Range("G43") .Range("L44") = Worksheets(k - 1).Range("L44") + .Range("G44") .Range("L45") = Worksheets(k - 1).Range("L45") + .Range("G45") .Range("L46") = Worksheets(k - 1).Range("L46") + .Range("G46") .Range("L47") = Worksheets(k - 1).Range("L47") + .Range("G47") .Range("L48") = Worksheets(k - 1).Range("L48") + .Range("G48") .Range("L49") = Worksheets(k - 1).Range("L49") + .Range("G49") .Range("L50") = Worksheets(k - 1).Range("L50") + .Range("G50") .Range("L51") = Worksheets(k - 1).Range("L51") + .Range("G51") .Range("L52") = Worksheets(k - 1).Range("L52") + .Range("G52") .Range("L53") = Worksheets(k - 1).Range("L53") + .Range("G53") .Range("L54") = Worksheets(k - 1).Range("L54") + .Range("G54") .Range("L55") = Worksheets(k - 1).Range("L55") + .Range("G55") .Range("M56") = Worksheets(k - 1).Range("M56") + .Range("H56") .Range("M57") = Worksheets(k - 1).Range("M57") + .Range("H57") .Range("L58") = Worksheets(k - 1).Range("L58") + .Range("G58") .Range("L59") = Worksheets(k - 1).Range("L59") + .Range("G59") .Range("L60") = Worksheets(k - 1).Range("L60") + .Range("G60") .Range("L61") = Worksheets(k - 1).Range("L61") + .Range("G61") .Range("L62") = Worksheets(k - 1).Range("L62") + .Range("G62") .Range("L63") = Worksheets(k - 1).Range("L63") + .Range("G63") .Range("L64") = Worksheets(k - 1).Range("L64") + .Range("G64") .Range("L65") = Worksheets(k - 1).Range("L65") + .Range("G65") .Range("L67") = Worksheets(k - 1).Range("L67") + .Range("G67") End With Next k End If End Sub これをWorkbookに貼りつけしたところ… 1~5まではばっちりなのですが、何故か6~31は元の数式が残ったままで反映されていないようです。 こちらこそ度々で申し訳ないのですがご教示いただけますでしょうか…

ytyd
質問者

補足

いえいえ、ありがとうございますm(_ _)m 回答7でいただいたコードを応用してみました。 (長いので、お礼に続きます…) Private Sub Workbook_Open() Dim k As Long If Day(Date) > 2 Then '「今日」が3日以降であれば With Worksheets(1) '「1」Sheetのみの操作 .Range("L30") = .Range("G30") .Range("L31") = .Range("G31") .Range("L32") = .Range("G32") .Range("L33") = .Range("G33") .Range("L34") = .Range("G34") .Range("L35") = .Range("G35") .Range("L36") = .Range("G36") .Range("L37") = .Range("G37") .Range("O38") = .Range("J38") .Range("O39") = .Range("J39") .Range("O40") = .Range("J40") .Range("O41") = .Range("J41") .Range("O42") = .Range("J42") .Range("L38") = .Range("G38") .Range("L39") = .Range("G39") .Range("L40") = .Range("G40") .Range("L41") = .Range("G41") .Range("L42") = .Range("G42") .Range("L43") = .Range("G43") .Range("L44") = .Range("G44") .Range("L45") = .Range("G45") .Range("L46") = .Range("G46") .Range("L47") = .Range("G47") .Range("L48") = .Range("G48") .Range("L49") = .Range("G49") .Range("L50") = .Range("G50") .Range("L51") = .Range("G51") .Range("L52") = .Range("G52") .Range("L53") = .Range("G53") .Range("L54") = .Range("G54") .Range("L55") = .Range("G55") .Range("M56") = .Range("H56") .Range("M57") = .Range("H57") .Range("L58") = .Range("G58") .Range("L59") = .Range("G59") .Range("L60") = .Range("G60") .Range("L61") = .Range("G61") .Range("L62") = .Range("G62") .Range("L63") = .Range("G63") .Range("L64") = .Range("G64") .Range("L65") = .Range("G65") .Range("L67") = .Range("G67") End With

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.1です。 補足の件について >作成した日報には累計したい項目(売上、仕入額、客数等)が複数あります。 >複数のセルを累計したい場合はどうすればいいでしょう?? とありますので・・・ 前回のような方法ですと、項目数だけ変数を設定しなければなりませんので、 一つ前(前日)Sheetの「累計」+「本日」Sheetの「日計」という考えでやってみました。 ファイルを開くとマクロが実行されるようにしていますので、 前回と同じ操作方法でやってみてください。 具体的な表のレイアウトが判らないので、勝手に↓の画像のような配置でのコードにしていますので、 セル番地は実状に合わせて変更してください。 (1行・1列違っただけで全く意図しない動きになりますので、セル番地等は特に注意が必要です) とりあえず3項目だけにしています。 Private Sub Workbook_Open() Dim k As Long With Worksheets(1) '「1」Sheetのみの操作 .Range("B4") = .Range("B3") '「1」Sheetの「売上累計」セルに「1」Sheetの「日計」を! .Range("C4") = .Range("C3") '「1」Sheetの「仕入れ額累計」セルに「1」Sheetの「仕入れ額」を! .Range("D4") = .Range("D3") '「1」Sheetの「客数累計」セルに「1」Sheetの「客数」を! End With If Day(Date) > 1 Then '「今日」が2日以降であれば For k = 2 To Day(Date) - 1 '←「2」Sheet~「本日」のSheetの一つ前(前日Sheet)まで累計欄に表示 With Worksheets(k) 'Sheet見出し左からk番目のSheetの '「累計」セルに k-1(ひとつ前)のSheet「累計」+ k番目Sheetの「日計」をプラス .Range("B4") = Worksheets(k - 1).Range("B4") + .Range("B3") .Range("C4") = Worksheets(k - 1).Range("C4") + .Range("C3") .Range("D4") = Worksheets(k - 1).Range("D4") + .Range("D3") End With Next k '次のSheetへ! End If End Sub ※ 上記コードをコピー&ペースト後「マクロ有効ブック」のファイル名で保存してください。 ※ 今回は「本日」Sheetの一つ前のSheetまでの累計を表示させるようにしてみました。 前回同様「累計」セルに数式を入れている場合は前日までのSheetの数式は消えてしまいます。m(_ _)m

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 前回の投稿した回答No.4ではお伝えする事が出来なかった、「条件付き書式を設定する事で見栄えを良くする方法」ですが、ExcelのバージョンがExcel2007以降のものである場合においては、条件付き書式を使用して非表示にする事が出来るのに対して、ExcelのバージョンがExcel2007よりも前のものである場合においては、条件を満たした際に、完全に非表示の状態に切り替える事は出来ず、文字の色を変更する事で目立たなくするだけである事を、最初にお断りしておきます。 【ExcelのバージョンがExcel2007以降のものである場合の設定方法】 1のシートの「G30セルの値の毎日の累計を表示させるセル」を選択   ↓ [ホーム]タブ内の「スタイル」グループの中にある[条件付き書式]ボタンをクリック   ↓ 現れた選択肢の中にある[ルールの管理]をクリック   ↓ 現れた「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック   ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択してください」欄の中にある[数式を使用して、書式設定するセルを決定]を選択してクリック   ↓ 現れた「次の数式を満たす場合に値を書式設定」欄に =NOT(ISNUMBER($G$30)) と入力   ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック   ↓ 現れた「分類」欄の中にある[ユーザー定義]を選択してクリック   ↓ 現れた「種類」欄に ;;; と入力   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック   ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択してください」欄の中にある[数式を使用して、書式設定するセルを決定]を選択してクリック   ↓ 現れた「次の数式を満たす場合に値を書式設定」欄に =NOT(ISNUMBER($G$31)) と入力   ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック   ↓ 現れた「分類」欄の中にある[ユーザー定義]を選択してクリック   ↓ 現れた「種類」欄に ;;; と入力   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの中にある、「ルール(表示順で適用)」欄の所にカーソルを合わせると、「数式: =NOT(ISNUMBER($G$31))」という表示が現れる行の、「適用先」欄をダブルクリック   ↓ 適用先のセル番号の表示色がネガ反転して黒地に白文字となっている事を確認し、その状態のままで、1のシートの「G31セルの値の毎日の累計を表示させるセル」をクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの[適用]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの[OK]ボタンをクリック   ↓ 1のシートの「G30セルの値の毎日の累計を表示させるセル」を選択   ↓ [Shift]キーを押しながら1のシートの「G31セルの値の毎日の累計を表示させるセル」をクリック   ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック   ↓ 現れた選択肢の中にある[コピー]をクリック   ↓ 2のシートのシートタブをクリック   ↓ Shiftキーを押しながら31のシートのシートタブをクリック   ↓ 2~31シートがまとめて選択されている状態で、「G30セルの値の毎日の累計を表示させるセル」を選択してから、[Shift]キーを押しながら「G31セルの値の毎日の累計を表示させるセル」をクリック   ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック   ↓ 現れた選択肢の中にある[形式を選択して貼り付け]をクリック   ↓ 現れた「形式を選択して貼り付け」ダイアログボックスの中にある[書式]と記されている箇所を、クリックする事でチェックを入れる   ↓ 「形式を選択して貼り付け」ダイアログボックスの[OK]ボタンをクリック   ↓ StartシートやEndシート等の、「1~31以外の適当なシート」のシートタブをクリック  以上です。 【ExcelのバージョンがExcel2007よりも前のものである場合の設定方法】 ※G30セルやG31セルが未入力となっているシートの「毎日の累計を表示させるセル」の文字色を白色に変えて、表示を目立ち難くし、印刷には表れない様にする事が出来ます。(完全な非表示という訳ではありません) 1のシートの「G30セルの値の毎日の累計を表示させるセル」を選択   ↓ [メニュー]の[書式]ボタンをクリック   ↓ 現れた選択肢の中にある[条件付き書式]をクリック   ↓ 現れた「条件付き書式の設定」ダイアログボックスの左端にある欄をクリック   ↓ 現れた選択肢の中にある[数式が]をクリック   ↓ 「条件付き書式の設定」ダイアログボックスの右側の欄に =NOT(ISNUMBER($G$30)) と入力   ↓ 「条件付き書式の設定」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[フォント]タブをクリック   ↓ 現れた「色」欄をクリック   ↓ 現れた色のサンプルの中にある白色の四角形を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式の設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 1のシートの「G31セルの値の毎日の累計を表示させるセル」を選択   ↓ [メニュー]の[書式]ボタンをクリック   ↓ 現れた選択肢の中にある[条件付き書式]をクリック   ↓ 現れた「条件付き書式の設定」ダイアログボックスの左端にある欄をクリック   ↓ 現れた選択肢の中にある[数式が]をクリック   ↓ 「条件付き書式の設定」ダイアログボックスの右側の欄に =NOT(ISNUMBER($G$31)) と入力   ↓ 「条件付き書式の設定」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[フォント]タブをクリック   ↓ 現れた「色」欄をクリック   ↓ 現れた色のサンプルの中にある白色の四角形を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式の設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 1のシートの「G30セルの値の毎日の累計を表示させるセル」を選択   ↓ [Shift]キーを押しながら1のシートの「G31セルの値の毎日の累計を表示させるセル」をクリック   ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック   ↓ 現れた選択肢の中にある[コピー]をクリック   ↓ 2のシートのシートタブをクリック   ↓ Shiftキーを押しながら31のシートのシートタブをクリック   ↓ 2~31シートがまとめて選択されている状態で、「G30セルの値の毎日の累計を表示させるセル」を選択してから、[Shift]キーを押しながら「G31セルの値の毎日の累計を表示させるセル」をクリック   ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック   ↓ 現れた選択肢の中にある[形式を選択して貼り付け]をクリック   ↓ 現れた「形式を選択して貼り付け」ダイアログボックスの中にある[書式]と記されている箇所を、クリックする事でチェックを入れる   ↓ 「形式を選択して貼り付け」ダイアログボックスの[OK]ボタンをクリック   ↓ StartシートやEndシート等の、「1~31以外の適当なシート」のシートタブをクリック  以上です。

ytyd
質問者

お礼

こちらはまだ反映できておりませんが、先にお礼を書かせて頂きます。 初心者ですが、見栄えする日報を作りたいと思っておりましたので、お気遣いとてもうれしいです。 ありがとうございました!!

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答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時以降)回答させて頂きます。

ytyd
質問者

お礼

Endシートを使う方法でうまくいきました!! お陰様で理想としていた日報をつくることができました。 業務が終わった後エクセルと格闘する日々におさらばできそうです。 僕の今いる会社はITリテラシーがとても低いのが現状です。 この日報により数店舗の業務の一部が簡略化できることで、みんなも喜んでくれると思います。 本当に助かりました。感謝します!!

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 今仮に、1~31シート以外の適当なシート上の適当な2列、例えばStartシートのC列~D列を作業列として使用するものとします。  まず、Startシートの C2セルに   '1 C3セルに   '2 C4セルに   '3 C5セルに   '4 C6セルに   '5 C7セルに   '6 C8セルに   '7 C9セルに   '8 C10セルに   '9 C11セルに   '10 C12セルに   '11 C13セルに   '12 C14セルに   '13 C15セルに   '14 C16セルに   '15 C17セルに   '16 C18セルに   '17 C19セルに   '18 C20セルに   '19 C21セルに   '20 C22セルに   '21 C23セルに   '22 C24セルに   '23 C25セルに   '24 C26セルに   '25 C27セルに   '26 C28セルに   '27 C29セルに   '28 C30セルに   '29 C31セルに   '30 C32セルに   '31 と言う具合に、1~31シートのシート名を、シートが並んでいる順番通りに入力して下さい。(「'」を忘れずに付けて下さい)  尚、この場合、「'」は表示には現れませんので、例えばStartシートのC2セルの場合、データは「'1」ですが、表示上は「1」と表示されます。  この場合、シート名は1~31の整数となっていますから、StartシートのC2セルに「'1」と入力した後、Excelのオートフィル機能を使用してC3~C32セルにコピーされると入力が楽になります。  次に、StartシートのD2セルに次の関数を入力して下さい。 =IF(ISERROR(INDIRECT($C2&"!A1")),"",INDIRECT($C2&"!A1"))  次に、StartシートのD2セルをコピーして、StartシートのD3~D32の範囲に貼り付けて下さい。(D2セルを選択してから、選択範囲を示す黒い太枠の右下の隅にある黒点をダブルクリックする事でもD3~D32の範囲に複写する事が出来ます)  次に、1のシートを選択してから、Shiftキーを押しながら31のシートのシートタブをクリックする事で、1~31のシートをまとめて選択してから、「毎日の累計を表示させるセル」を選択し、そこに次の関数を入力して下さい。 =IF(COUNTIF(Start!$C:$C,REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1),FIND(".xls",CELL("filename",A1))),)),SUM(Start!$D$2:INDEX(Start!$D:$D,MATCH(REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1),FIND(".xls",CELL("filename",A1))),),Start!$C:$C,0))),"")  次に、StartシートやEndシート等の、「1~31以外の適当なシート」を開く事で、「1~31のシートがまとめて選択されている状態」を解除して下さい。  以上です。

ytyd
質問者

お礼

ありがとうございます。 画像のように再現できるよう早速応用してみます!!

ytyd
質問者

補足

すみません… 別シートに画像通りに再現することはできたのですが、 自分の日報に応用しようとしたところ失敗してしまいました。 これを自分の日報に応用する際、この数式のどこをいじれば いいでしょうか? 少し詳しく書きます。 (1) Startシートに上記の通りC2セルに'1~C32セルに'31を作った場合のそれぞれのセルの置き換えは StartシートD2~   =IF(ISERROR(INDIRECT($C2&"!G30")),"",INDIRECT($C2&"!G30"))   ↑A1=G30にかえました 累計セルに =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にかえただけです …としましたが、累計が表示されませんでした。 (2)  ↑ができたと仮定して… 作成した日報には累計したい項目(セル)が複数あります。 続いてG31を累計する場合、StartシートのE列に それぞれの数字(売上の場合は1日ごとの売上金額)が 入るように1枚のシートで完結させることは可能でしょうか。 質問が多くなってしまって申し訳ないです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! VBAになってしまいますが、一例です。 日計がA1セルにあり、B1セルに各シート累計を表示させるとします。 Sheet見出しの左から1・2・3・・・と日付順に並んでいるという前提です。 Alt+F11キー → 画面左側の「Sheet1」・「Sheet2」・・・と表示されている一番下の 「This Workbook」をダブルクリック → VBE画面に ↓のコードをコピー&ペーストしておいてください。 Private Sub Workbook_Open() 'この行から Dim k As Long, mySum For k = 1 To Worksheets.Count Worksheets(k).Range("B1") = "" If k <= Day(Date) Then mySum = mySum + Worksheets(k).Range("A1") Worksheets(k).Range("B1") = mySum End If Next k End Sub 'この行まで このファイルを名前を付けて保存する訳ですが、ファイルの種類は「マクロ有効ブック」で保存します。 以上で完了です。 以後、ファイルを開くたびに各SheetのB1セルはSheet「1」から本日Sheetまでの累計が表示されているはずです。 ※ 万一B1セルに数式を入れている場合はすべてのSheetのB1セルの数式は消えてしまいます。m(_ _)m

ytyd
質問者

お礼

VBAとても便利ですね。 難しいですが、少しずつ勉強します。 ありがとうございました~

ytyd
質問者

補足

作成した日報に応用したところ、売上の累計が気持ちよく入りました。ありがとうございます~。 …が、もう一度質問よろしいでしょうか。。 作成した日報には累計したい項目(売上、仕入額、客数等)が複数あります。 workbook内にコピー&ペーストを繰り返したところ、失敗してしまいました。 複数のセルを累計したい場合はどうすればいいでしょう??

関連するQ&A

  • エクセルで日報を自動で累計させる方法は?

    1枚のシートにまったく同じ2枚の表を上下に並べて 上は当日の日報を手入力、下は日報の当月累計を 自動で表示したいのですがどうすればよいでしょうか。 (例) 【日報】5月24日  A    B    C    D    E    F 1   品名1  品名2  品名3  品名4  総計 2ア社  10   0    5   0   15 3イ社 20   10   0   15   45 4ウ社 15   0   0   0   15 ------------------------------------------------- 5総計 45 10 5 15 75 6 7【累計】5月1日~24日 8  品名1  品名2  品名3  品名4  総計 9 ア社  190 50  45 10 310 10イ社 300 100 0 50 495 11ウ社 150 0 20 15 200 ------------------------------------------------- 12総計 640 150 65 75 1005 こんな感じの表です。

  • EXCELのシート間でのマクロ計算

    毎日の日報をEXCELのワークシートで作成しております。日報は、その「日」の売上とその「月」の売上(累計)を出すようにしております。月の売上(累計)は、前日の売上のシート(前日分)+本日の売上のシート(本日分)で表しております。日報は、項目がたくさんあるので、月売上を出す場合、シート間での毎日の計算作業が面倒です。ですから、この計算作業をマクロで出来ればと思っております。1つのシートでマクロを使用することは解るのですが、シート間でマクロを利用するやり方がわかりません。 なにとぞ、よろしくお願いいたします。

  • エクセルで、売り上げの日計と累計を自動計算する方法を教えてください。

    エクセルを活用し、毎日の売り上げをシートごとに入力し、その累計は別のシートに自動的に計算する方法はありますか。以前「串刺し」という方法があると聞いたことがありますが、よくわからなかったので、あれば教えてください。

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

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

  • エクセルでとびとびのデータの累計の出し方

    エクセルで、とびとびのデータの累計の出し方を教えてください。 例えば、たてに顧客ごとに A顧客「前月売上」 A顧客「今月売上」 B顧客「前月売上」 B顧客「今月売上」 ・・・と並べたときに、 最後の行に「前月売上累計」「今月売上累計」を作りたいのです。 =SUM(A1,A3) というように作ってもいいのですが、クリックして選択していくのは手間がかかります。また、顧客数が多いとなぜかエラーになってしまい、現状、2つ以上のSUMをつなげて累計を出したりしています。。 何か簡単に計算する方法があったら教えてください。 よろしくお願いします。

  • EXCELで複数のシートの日々の累計

    初めて投稿いたします。 とても困っているので、どうぞ宜しく御願いします。 エクセル2000で、1つのBOOKに一ヶ月分の日報のシートを作成しました。 各シート名は、6月1日、6月2日、6月3日~6月30日となっています。 例えば、 この6月2日のシートのC1に6月2日の売り上げを手入力すると、このシートの E1に前日(6月1日)の売り上げ(6月1日シートのC1)+今日(6月2日)の売り上げ =累計が計算されるようにしたいのです。 月によって、営業日数が違うので、もう一枚シートを作成して、そのシートのA列に 営業日数分のシート名(6月1日、6月2日・・・)を縦に羅列し、それを読んでその名前のシートの売り上げ(C1)を読んで、当日の売り上げと累計していきたいのです。 初日は、当日の売り上げが累計値となり、 2日目は、1日目+2日目の値 3日目は、1日目+2日目+3日目の値となるようにしたいのです。 似たような質問をされているのを探して、いろいろと試してみましたが、 関数もVLOOKUPやIF等の簡単なものした使用したことがなく、うまくいかないのです。 どうか、詳しく教えていただけると、助かります。 宜しく御願いします。

  • Excelで毎日の売上を入力すると同時に別のSheetに累計が…

    初心者です。Excel2000を使っています。 Sheet1に毎日の商品別・社員別の売上金を入力しています。 表の列に商品別項目(80品目くらいあります)を、行に社員名(15人ほど)なので結構大きな表です。 どの社員がどの商品をどのくらい売ったか…を社長が毎日チェックします。 1週間の累計が欲しいのでSheetを7枚コピーし、日々Sheet毎に入力し、Sheet8で串刺し集計をして、累計をとっていました。 表が大きいので毎日の入力Sheetは1枚にして、累計のSheetに 昨日の売上+今日の売上=今日現在の累計 といったように、入力Sheetの数値が累計のSheetに反映されるような数式設定は簡単にできますか? 日々の売上表と累計の売上表を同時に素早く、社長に提示できるようお達しがありました。 そして月末には当然1ヵ月分を出します。お願いします。

  • エクセル作表 日ごとの累計

    エクセル2003で、1ヶ月の売上を日にち毎にシートを作成し、その日までの累計を表示させたいのですが、簡単に31日分のシート作成する方法はないのでしょうか?

  • エクセル:シートを増やすと計算が反映されません・・

    No.465690で計算の仕方を教わったものです。(以下引用) -------------------- 今現在、 ・毎月の計算で、月ごとにシートが増えていきます。 ・毎月、当月の売上と累計を手入力しています。 例として、1月からスタートするとして <1月 sheet1>   A     B 1当月売上 150(手入力) 2売上累計 150(手入力) <2月 sheet2>   A     B 5当月売上 180(手入力) 6売上累計 330 ※分かりやすくする為、行の番号を変えてみました1.2と5.6  A.Bは列番号とお考え下さい これを、2月の当月売上だけを入力すれば、 自動的に2月の売上累計が増えるようにはできませんか? そして3月も同じく、当月売上を入力して 2月で計算された累計にプラスすることはできるのでしょうか?? ご指導お願いいたします。 -------------------- これで教えていただいた方法(2月sheet2で =sheet1!B2+B5)で 確かに計算は出来たのですが、 翌月(3月)にシートをコピーなどして増やしても sheet3の欄には =sheet1!+B5 となってしまい、 1月+3月という形になってしまいます。(当たり前なのでしょうが・・) 毎月計算式を手入力するのなら式を入れる意味が無いので・・・ なんとか「前月+今月」という計算をする方法は無いでしょうか。 シートを毎月増やしていく事から、シートの増やし方も踏まえて 教えていただけないでしょうか・・・。 <1月 sheet1>   A     B 1当月売上 150(手入力) 2売上累計 150(手入力) <2月 sheet2>   A     B 5当月売上 180(手入力) 6売上累計 330(=sheet1!B2+B5) <3月 sheet3>   A     B 7当月売上 50(手入力) 8売上累計 380 になるために・・(?)

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

    日報作成をマクロで自動化する方法を探しています。 とりあえずできたのは、 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を少しかじったことがありますが、 マクロを使うのは初で、上記もネットで見つけたコードを少しいじった程度です、、 詳しい方がいらしたら教えてください。 よろしくお願いいたします。

専門家に質問してみよう