|
えっとですね・・
>次にその日の最後(集計後)に集計したシートをコピーして、その後値をクリアして
>シート名に明日の日付を付けて準備完了
という現在の作業形態を "止めて"
>朝、ブックを開いた時点で、その日(システム日付)のシートが存在しない場合は、
>原紙となる未記入シートをブック内に持って置いて、そのシートをコピーして名前に
>その日の日付を付けて開き、作業を開始する。
>また、その日(システム日付)のシートが存在する場合(中断等で保存後再開する場合)
>は、そのシートを開いて作業を続行する
という処理形態に移行したい、ということなんですね ?
なんか殆ど仕事の依頼みたいだけど、まぁいいです。
これはまず
>その日(システム日付)のシートが存在しない場合
を無くすことが第一のポイントでしょう。それはマクロを使えばわけなく出来ます。
>原紙となる未記入シート
これはつまり、テンプレートのようなもので、項目とか罫線などの書式を作ってあって
データだけが未記入のシートなわけですね ?
それなら当月一ヶ月分の、新しいブックを作成するマクロを提示しましょう。
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参照(串刺し計算)の数式とか、統合機能などが使えて便利なのです。
よく検討してみてください。
|
|