• ベストアンサー

特定の日付の時にmsgボックスを表示するVBA

エクセルシート「残圧確認表」のセルA1には計算式「=TODAY()」が入力されています。 (1)このエクセルシートを開いた際、月の最後の日(2019年5月の場合は31日)に【2019年5月の最後の日なので残圧入力後に「PDFファイルに保存」ボタンを押してデータを保存して下さい。】とmsgボックスを表示させるVBAはどの様にすれば宜しいでしょうか? (2)このエクセルシートを開いた際、月の最初の日(2019年6月の場合は1日)に【2019年6月の最初の日なので「残圧クリア」ボタンを押してデータをクリア後に記入して下さい。】とmsgボックスを表示させるVBAはどの様にすれば宜しいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.2

(2)を忘れてました。 Private Sub Workbook_Open() With Sheets("残圧確認表").Range("A1") If DateSerial(Year(.Value), Month(.Value) + 1, 0) = .Value Then MsgBox "【" & Year(.Value) & "年" & Month(.Value) & _ "月の最後の日なので残圧入力後に「PDFファイルに保存」ボタンを押してデータを保存して下さい。】", vbInformation ElseIf Day(.Value) = 1 Then MsgBox "【" & Year(.Value) & "年" & Month(.Value) & _ "月の最初の日なので「残圧クリア」ボタンを押してデータをクリア後に記入して下さい。】", vbInformation End If End With End Sub A1参照をやめてVBAで当日の日付を得たい場合は以下を Private Sub Workbook_Open() If DateSerial(Year(Date), Month(Date) + 1, 0) = Date Then MsgBox "【" & Year(Date) & "年" & Month(Date) & _ "月の最後の日なので残圧入力後に「PDFファイルに保存」ボタンを押してデータを保存して下さい。】", vbInformation ElseIf Day(Date) = 1 Then MsgBox "【" & Year(Date) & "年" & Month(Date) & _ "月の最初の日なので「残圧クリア」ボタンを押してデータをクリア後に記入して下さい。】", vbInformation End If End Sub

noname#247334
質問者

お礼

ありがとうございました。 非常に参考になりました!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

既に回答は出ているが、解説的なことを書くと、 (1)この課題を実現するには、VBAでは、ブックのOpenイベントを使うことになろう。 その「コード記述箇所」は 任意の(またはその)Excelブック>VBAProject>Microsoft Excel Objects>ThisWorkBook、の箇所をクリックして(プロジェクトエクスプローラーの画面を表示しておくこと)、出てきた画面に Sub workbook_open() MsgBox ("ブックが開かれました") '開いた日が月初 If Date = DateSerial(Year(Date), Month(Date), 1) Then MsgBox "月初です" Else   MsgBox "月初ではありません" End If End Sub に適当にMsgboxをついかすればしまい。 ーーー この質問には、操作日が当日に行われると考えてよいのか? A.データ入力の操作日 B.基準日=データ内容日  これはシートでわかるのか、入力するのか。 >残圧クリアは、ある機械の機械的・物理的な動作のことか?シートのデータの記録セルを0とかにするか。 多分月初日や月末データを入陸終了日するのは、月初日や、月末日の当日に限らないのでは?社内では常識と思うかもしれないが、それが質問する態度として 甘い。システムの仕事を業者に依頼するときも、十分そういったことを注意しないと、ろくなものが出来上がらないし、最悪事故を起こすこともあり得ると思うよ。 そのことを質問に書いてないのは、初心者らしいことをうかがわせる。 もしデータ基準日などが、シートのどこかのセルからわかる場合は、それを 示して質問することも必要。 ーー また月初や月末日が土曜や膾炙日曜や祝日や会社休業日になら、その前日や翌日に作業が行われるとか、基準日が、月最終日や月初最初の業務日などで、質問のことをしたいときは、そのための判定のVBAコードが煩雑になる。 ーー workbook_openイベントを使うことというポイントと、 表示する日をどう判定することが、難しい事項と思う。 >残圧クリア」ボタンを押してデータをクリア後に記入して下さい。】とmsgボックスを表示させるVBAはどの様にすれば宜・・などは、 VBAの学習の最初のことで、聞くまでもないことでは。

noname#247334
質問者

お礼

ありがとうございました。 参考になりましたが回答に対して鼻に触る部分がありました。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

こんなコードでいかがでしょうか。 Option Explicit '===================== A1セルの値で判断する場合 Private Sub Workbook_Open()  Dim Msgtext As String  With ThisWorkbook.Sheets("残圧確認表")   If Day(.Cells(1, 1).Value + 1) = 1 Then    Msgtext = "【" & Format(.Cells(1, 1).Value, "yyyy年m月")    Msgtext = Msgtext & "の最後の日なので" & vbCrLf    Msgtext = Msgtext & "残圧入力後に「PDFファイルに保存」ボタンを押して" & vbCrLf    Msgtext = Msgtext & "データを保存して下さい。】"    MsgBox Msgtext   ElseIf Day(.Cells(1, 1).Value) = 1 Then    Msgtext = "【" & Format(.Cells(1, 1).Value - 1, "yyyy年m月")    Msgtext = Msgtext & "の最初の日なので" & vbCrLf    Msgtext = Msgtext & "「残圧クリア」ボタンを押して" & vbCrLf    Msgtext = Msgtext & "データをクリア後に記入して下さい。】" & vbCrLf    MsgBox Msgtext   End If  End With End Sub '===================== 実行日時で判断する場合 Private Sub Workbook_Open()  Dim Msgtext As String    'With ThisWorkbook.Sheets("残圧確認表")   If Day(Now+1) = 1 Then    Msgtext = "【" & Format(Now, "yyyy年m月")    Msgtext = Msgtext & "の最後の日なので" & vbCrLf    Msgtext = Msgtext & "残圧入力後に「PDFファイルに保存」ボタンを押して" & vbCrLf    Msgtext = Msgtext & "データを保存して下さい。】"    MsgBox Msgtext   ElseIf Day(Now) = 1 Then    Msgtext = "【" & Format(Now - 1, "yyyy年m月")    Msgtext = Msgtext & "の最初の日なので" & vbCrLf    Msgtext = Msgtext & "「残圧クリア」ボタンを押して" & vbCrLf    Msgtext = Msgtext & "データをクリア後に記入して下さい。】" & vbCrLf    MsgBox Msgtext   End If  'End With End Sub なお、このコードの配置先は VBEのworkbookオブジェクトです。

noname#247334
質問者

お礼

ありがとうございました。 参考になりました!

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.1

ThisWokbookのモジュールに以下のコードを記載してください。 Sheets("残圧確認表").Range("A1").Value はセル参照しなくても Date でいけると思いますが一応参照にしてます。 Private Sub Workbook_Open() If DateSerial(Year(Date), Month(Date) + 1, 0) = Sheets("残圧確認表").Range("A1").Value Then MsgBox "【" & Year(Sheets("残圧確認表").Range("A1").Value) & "年" _ & Month(Sheets("残圧確認表").Range("A1").Value) & "月の最後の日なので残圧入力後に「PDFファイルに保存」ボタンを押してデータを保存して下さい。】", vbInformation End If End Sub

noname#247334
質問者

お礼

ありがとうございました。 参考になりました!

関連するQ&A

専門家に質問してみよう