
開いたときに自動的に更新したい 3 つのフィールドを持つ Excel テンプレートを作成しようとしています。
このテンプレートに含まれるフィールド
- 現在の日付: 2012/02/07
- シート番号: 25
- 期間: 2012/02/07 ~ 2012/02/08
2012年3月8日以降にこのテンプレートを開くと、このシートには新しいデータが表示されます。
- 現在の日付: 2012/03/08
- シート番号: 26
- 期間: 2012/03/08 ~ 2012/02/09
現在の日付
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Date
End Sub
これは Excel 関数を使用して実行できますか、それとも VB を使用する必要がありますか。また、次回これらの日付を使用するように、テンプレートを新しい値で自動的に更新するにはどうすればよいですか。
答え1
これを実現するにはいくつかの方法があります。
最も簡単なのは、開始日と終了日が一貫していることを前提とすることです。
- 「間」の日付は2つのセルに入力する必要があります。「開始」日は現在の月の2日に設定され
=DATE(YEAR( NOW() ), MONTH( NOW() ), 2)
、「終了」日は現在の月の2日+1に設定されます。=DATE(YEAR( NOW() ), MONTH( NOW() ) +1, 2)
- 「現在の」日付は単に「開始」日付に設定されます。
ただし、スプレッドシートを保存するときに、これらの日付を「修正」する必要があります。 「現在の」日付がセル B3 にあり、日付間の 2 つの日付がセルにあると仮定します。次のようなものを使用できます。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Range("B3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("B5:C5").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
コード モジュール内ThisWorkbook
。これは、セルの値をコピー/貼り付けして、数式を日付に置き換えるだけです。
おっと、これには 1 つ追加が必要です。私が提供したコードは少し単純すぎるので、テンプレートを保存できないため、テンプレート自体を編集するときにトリガーされないように、提供されたコードをラップする必要があります。おそらく最も簡単な方法は、ファイルに命名規則を使用することです。おそらく、テンプレートのファイル名の先頭に「TEMPLATE」というテキストがあります。