プロが教える店舗&オフィスのセキュリティ対策術

シートをコピー追加し、日報の累計をしていきたいです。

やりたいことは以下の通りです。

1.原紙からシートをコピー追加。「E4」へ追加した日付入力。
2.シートの名前を日付の数字のみに変更(24)
「合計/日」の「作業時間」には自動的に計算式が入力されています。
3.追加したシートの「累計」に前日の「累計」と「合計/日」を足したい。

検索して1~31日すべてをコピー追加累計などはあるのですが
締めが20締めで開始が21日からです。
稼働日が毎日ではないので数字は飛ぶ時もあります(土日祝など)
検索したものを編集すればいいのですが知識もなく困っています。

よろしくお願いします。

「至急お願いします。エクセルシートコピー追」の質問画像

質問者からの補足コメント

  • ほんとに簡単な式で「E7」~「E13」には「終了時間」-「開始時間」の
    式が入っているのでそれをSUMで足しています。

    =SUM(E7:E13)

    になります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/10/25 13:35
  • やはり一気に作るやり方しかないのでしょうか。
    串刺しも考えましたがあれはまとめてですよね?
    今日の合計と今日までの累計をみたいのです。
    現在は21~30(31)が一気に作成されます。
    シート名表示、累計などしたいことは完璧なのですが1日、1日追加したいのです。
    現在は次の補足のコードです。

      補足日時:2018/10/26 10:06
  • Sub 新規作成()
    Dim x1stDay As Date, xEndDay As Date, xDay As Date
    Dim sh0 As Worksheet, sh As Worksheet
    Const xFormula As String = "=@@!J7+I7"
    x1stDay = InputBox("日報", "最初の日付を指定", Date) '最初のシートの日付を指定
    xEndDay = CDate(Format(DateAdd("m", 1, x1stDay), "yyyy/mm/") & "01") - 1
    Application.ScreenUpdating = False
    Set sh0 = Worksheets("原紙")
    For xDay = x1stDay To xEndDay

    つづく

      補足日時:2018/10/26 10:09
  • つづき

    If sh Is Nothing Then
    sh0.Copy
    Else
    sh0.Copy after:=sh
    End If
    With ActiveSheet
    .Name = Format(xDay, "dd") 'コピーしたシートの名前を変える
    .Range("E4") = xDay
    If Not sh Is Nothing Then
    .Range("J7").Formula = Replace(xFormula, "@@", sh.Name)
    End If
    End With
    Set sh = ActiveSheet
    Next xDay
    Application.ScreenUpdating = True
    End Sub

      補足日時:2018/10/26 10:10

A 回答 (3件)

>「合計/日」の「作業時間」には自動的に計算式が入力されています



この計算式を提示してください。
この回答への補足あり
    • good
    • 1

この手のものは「串刺し計算」で良いはずなんだ。



まず日付ごとに、
 21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
という順番でシートを並べる必要があります。
そして、21日のシートや20日のシートが存在しないこともあるようですので、
別途
 「開始」「終了」
というシートを作成します。
開始シートは21日のシートの左に配置し、終了シートは20日のシートの右に配置します。
 開始,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,終了
あとは、
 =SUM(開始:終了!A1)
の数式で
 開始シートから、終了シートに挟まれたシートのA1セルの合計を求めることができます。


・・・本骨頂・・・

質問では、シートの日付までのデータを欲しているようですので、
この「終了」シートに当たる部分をその日のシート名に変えてしまえばいいことになります。
CELL関数を使ってシート名を取得しましょう。
 =CELL("filename")
で保存されているファイルのパスとファイル名とシート名を取得できます。
Dドライブの「data」フォルダ中の「Documents」フォルダに「ファイル.xlsx」という名前で保存された、「20」というシートなら、
 D:\data\Documents\[ファイル.xlsx]20
と値が返ってきます。
FIND関数やSEARCH関数で ”]” の文字が左から何文字目かを確認して、MID関数などでシート名だけを抜き取りましょう。
 =FIND("]",CELL("filename"))
でファイル名の右側にある "]" の位置が分かりますので、
 =MID(CELL("filename"),FIND("]",CELL("filename"))+1,2)
こんなのでOK。

あとはこれをINDIRECT関数で範囲名にしてやれば良いだけです。
 INDIRECT("開始:" & MID(CELL("filename"),FIND("]",CELL("filename"))+1,2) & "!A1")
こんな感じになりますので、あとはSUM関数に範囲として渡せば終わり。
 =SUM(INDIRECT("開始:" & MID(CELL("filename"),FIND("]",CELL("filename"))+1,2) & "!A1"))

お疲れさまでした。
あとはこれを応用してください。


・・・注意・・・

その日の合計と、その日までの累計を別々に求めることになります。
そのほうが良いと思うんですけどね。
    • good
    • 0

あれ?


串刺し計算で「本日までの累計」を求める方法も記述したのですが…難しかったですか。
CELL関数とかINDIRECT関数なんて滅多に使わない関数を使ったのが悪かったかな。

申し訳ありませんでした。
自分としてはかなり噛み砕いて説明したつもりだったのですが、マクロで処理しようということであれば、自分はここで退散させていただきます。
(マクロでの処理はそれこそ定石なものから凝ったものまで様々ですから)
    • good
    • 0
この回答へのお礼

毎日現場の人が1シートづつ追加していってるので
追加していってなおかつ累計も自動にできればいいと思ったのです。

根本的なとこで躓いてしまって初心者の私には難しかったです。
すいません。自己流でとりあえずしてきたので基礎的なことが抜けてることに
気づきました。もう少し基礎的なところから勉強していきたいと思います。
ありがとうございました。

お礼日時:2018/10/29 09:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています