• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの営業日報で累計を残す方法)

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

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

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

  • ベストアンサー
  • 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

専門家に質問してみよう