| 
    
     |  | えっとですね・・ >次にその日の最後(集計後)に集計したシートをコピーして、その後値をクリアして
 >シート名に明日の日付を付けて準備完了
 という現在の作業形態を "止めて"
 >朝、ブックを開いた時点で、その日(システム日付)のシートが存在しない場合は、
 >原紙となる未記入シートをブック内に持って置いて、そのシートをコピーして名前に
 >その日の日付を付けて開き、作業を開始する。
 >また、その日(システム日付)のシートが存在する場合(中断等で保存後再開する場合)
 >は、そのシートを開いて作業を続行する
 という処理形態に移行したい、ということなんですね ?
 なんか殆ど仕事の依頼みたいだけど、まぁいいです。
 これはまず
 >その日(システム日付)のシートが存在しない場合
 を無くすことが第一のポイントでしょう。それはマクロを使えばわけなく出来ます。
 >原紙となる未記入シート
 これはつまり、テンプレートのようなもので、項目とか罫線などの書式を作ってあって
 データだけが未記入のシートなわけですね ?
 それなら当月一ヶ月分の、新しいブックを作成するマクロを提示しましょう。
 
 Sub ThisMonth_Make_NewBook()
 Dim MkFile As String
 Dim Ans As Integer, Scnt As Integer, NewS As Integer
 Dim SDay As Date
 Dim WS As Worksheet
 
 MkFile = Application.DefaultFilePath & _
 "\" & Month(Date) & "月.xls"
 If Dir(MkFile) <> "" Then
 Ans = MsgBox("今月のブックは既に存在します" & vbLf & _
 "削除して新規にブックを作成しますか", 36)
 If Ans = 7 Then Exit Sub
 End If
 NewS = Day(DateSerial(Year(Date), Month(Date) + 1, 1) - 1)
 SDay = DateSerial(Year(Date), Month(Date), 1)
 With Application
 Scnt = .SheetsInNewWorkbook
 .SheetsInNewWorkbook = NewS
 .ScreenUpdating = False
 End With
 Workbooks.Add
 With ActiveWorkbook
 For Each WS In .Worksheets
 WS.Name = CStr(Format(SDay, "m月d日"))
 SDay = SDay + 1
 Next
 ThisWorkbook.Sheets("Mytemplate").Copy Before:=.Worksheets(1)
 .Sheets.FillAcrossSheets .Sheets("Mytemplate").UsedRange
 .Sheets("Mytemplate").Visible = False
 .SaveAs Application.DefaultFilePath & "\" & Month(Date) & "月.xls"
 .Close
 End With
 With Application
 .ScreenUpdating = True
 .SheetsInNewWorkbook = Scnt
 End With
 End Sub
 
 これをどこかのブックに入れて、"Mytemplate" という仮のシート名を実際の
 >原紙となる未記入シート
 に変更して実行してみて下さい。これで記入する日のシートが見つからない、
 という事態が避けられるのだから、ほぼ解決すると思います。ただ、質問の内容から
 推測するに、月単位にブックを作っていくのでなく、一つのブックを使いまわしたい
 みたいな感じですね・・。それならそれで、また別のコードを考えてみますから
 説明して下さい。
 あと、最初の質問の「合計を最終入力行の下に入れる」という処理に関しては、
 原紙となる未記入シートに、データの入力可能な範囲を充分にとって雛型の表を
 作り、その表の最終行に予め数式を入れておけば良いでしょう。そうすると、
 どのシートも一定の行に数式がある形になるから、最後に当月の集計をするにも
 3D参照(串刺し計算)の数式とか、統合機能などが使えて便利なのです。
 よく検討してみてください。
 
 |  |