• ベストアンサー
  • すぐに回答を!

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

  • 質問No.9615470
  • 閲覧数73
  • ありがとう数7
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 99% (313/314)

エクセルシート「残圧確認表」のセルA1には計算式「=TODAY()」が入力されています。

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

(2)このエクセルシートを開いた際、月の最初の日(2019年6月の場合は1日)に【2019年6月の最初の日なので「残圧クリア」ボタンを押してデータをクリア後に記入して下さい。】とmsgボックスを表示させるVBAはどの様にすれば宜しいでしょうか?

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

  • 回答No.2
  • ベストアンサー

ベストアンサー率 54% (591/1084)

Excel(エクセル) カテゴリマスター
(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
お礼コメント
118249

お礼率 99% (313/314)

ありがとうございました。
非常に参考になりました!
投稿日時:2019/05/11 13:19

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 28% (4497/16047)

既に回答は出ているが、解説的なことを書くと、
(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の学習の最初のことで、聞くまでもないことでは。
お礼コメント
118249

お礼率 99% (313/314)

ありがとうございました。
参考になりましたが回答に対して鼻に触る部分がありました。
投稿日時:2019/05/11 13:23
  • 回答No.3

ベストアンサー率 61% (244/396)

Excel(エクセル) カテゴリマスター
こんなコードでいかがでしょうか。

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オブジェクトです。
お礼コメント
118249

お礼率 99% (313/314)

ありがとうございました。
参考になりました!
投稿日時:2019/05/11 13:24
  • 回答No.1

ベストアンサー率 54% (591/1084)

Excel(エクセル) カテゴリマスター
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
お礼コメント
118249

お礼率 99% (313/314)

ありがとうございました。
参考になりました!
投稿日時:2019/05/11 13:24
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ