ジムは、特定のセルの日付を毎月14/15の深夜(15日の00:00:00)に1か月進める必要があり、どうすればよいのか疑問に思いました。

Excelの多くの問題と同様に、答えは関連するデータの性質と正確に何をしたいかによって異なります。セルの日付が今日の日付であり、セルに現在の月から14日までを表示させ、その翌月を表示させたい場合は、次のような数式を使用できます。

=CHOOSE(IF(DAY(NOW())>14,MONTH(NOW())+1,MONTH(NOW())), "January","February","March","April","May","June", "July","August","September","October","November", "December","January")

この数式は、日付ではなく月の名前を返します。日付を返したい場合は、次の式を使用できます:

=IF(DAY(NOW())>14,DATEVALUE(IF(MONTH(NOW())=12,1, MONTH(NOW())+1) & "/" & DAY(NOW()) & "/" & IF(MONTH( NOW())=12,YEAR(NOW())+1,YEAR(NOW()))),NOW())

これらの式は両方とも、12月から1月に進むときの「年末のラップアラウンド」を説明します。 DATEVALUE関数の代わりにDATE関数を使用すると、この最後の式の短いバージョンを作成できます。

=DATE(YEAR(NOW()),MONTH(NOW())+((DAY(NOW())>14)*1),1)

この数式は、DATEVALUEの例とは異なり、特定の月の最初の日である日付を常に返します。

セル内の特定の日付の値を本当に進めたい場合は、マクロを使用してタスクを実行する必要があります。さらに、マクロが月に1回、特定の日の特定の時間にのみ実行されるようにする必要があります。たとえば、毎月15日の00:00:00にマクロを実行する場合は、日付と時刻を確認してから、その特定の日時に実行するようにマクロを設定する必要があります。また、マクロを含むブックがその日時に開いていることを確認する必要があります。

次のマクロは、セルから日付を取得し、1か月ずつ増やします。このマクロは、更新されるセルを参照する名前付き範囲DateCellがあることを前提としています。

Sub IncreaseMonth()

Dim dDate As Date     dDate = Range("DateCell").Value     Range("DateCell").Value = _       DateSerial(Year(dDate), _       Month(dDate) + 1, Day(dDate))

End Sub

マクロが適切な時間に実行されるようにするには、別のマクロが必要になります。次のマクロは、ブックが開かれるたびに実行されるように設計されています。

Private Sub Workbook_Open()

If Day(Now) = 14 Then     Application.OnTime ("23:59:59"), "IncreaseMonth"

End If End Sub

この特定のマクロは、14日の23:59:59にIncreaseMonthマクロを実行するようにOnTimeメソッドを設定していることに注意してください。この日時は、15日の00:00:00よりもキャッチしやすいために選択されました。

増加月間マクロは、14日にブックを開き、15日までブックを開いたままにした場合にのみ実行されることに注意してください。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2180)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。