• ベストアンサー

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

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

noname#247334
noname#247334

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答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/17068)
回答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% (454/691)
回答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
  • ベストアンサー率65% (1618/2457)
回答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

  • エクセルVBA テキストボックス 日付表示

    エクセルVBAにて入力用フォームを開いたときに フォーム内にあるテキストボックスに今日の日付が 自動で表示されるようにしたいのですが どの様に書き込めば宜しいでしょうか? また、2008.09.05 平成20年9月5日などの 日付形式の変更はどの様に書き込むのでしょうか?

  • テキストボックスをグループ化するVBA

    エクセル上に並んだテキストボックスを、ボタンを押すことで、任意のテキストボックスをグループ化させたい。また、別のボタンでグループ化の解除が出来るようなVBAをおしえてください。 テキストボックスは、Sheet1~3まであって、ボタンもそれぞれに配置してあり、 どこのSheetのボタンを押しても、各シート、それぞれに任意の設定したテキストボックスがグループ化できるようにしたい ※各シート、グループ化するテキストボックスはおなじでなない・・・ よろしくお願いします。

  • エクセルVBA テキストボックスで日付を・・・

    皆様にはいつも大変お世話になっております。 またまた、悩むところがあり、乗せさせていただきました;; テキストボックスをVBAのフォームで作ったのですが、 そのテキストボックスの中に今日の日付を登録しておきたいのです。 テキストボックスをエクセルで開いたときに、必ず今日の日付を出しておきたいのです。 ちなみに年・月・日は違うテキストボックスになっています。 なにとぞ宜しくお願いいたします

  • VBAのメッセージボックスで%表示

    お世話になります。 VBAにて、算出されたある数字をメッセージボックスで %表示したいのですが、エクセルシートであれば、表示させる セルを決め、そのセルの表示形式を「パーセンテージ」にすれば いいのですが、メッセージボックスで表示させたいのです。 可能なのかどうか分かりませんが、ご教示頂きたく宜しく お願い申し上げます。

  • Excel VBA シートのコピー時に、シート上のコンボボックスもコピーしたい。

    こんにちは。 Excel VBAについて質問させていただきます。 やりたいことは、 シートAにボタンとコンボボックスを配置し、 コンボボックスには氏名の一覧を設定しています。 そこで、ボタンを押すとシートAをボタンとコンボボックスごと シートBという名前でコピーをしたいと思っています。 ActiveSheet.Copy Before:=Worksheets(1) でシート・ボタン・コンボボックスのコピーはうまく出来たのですが、 コンボボックスに設定していた氏名の一覧はコピーされていませんでした。 コピー先のシートのコンボボックスにもう一度氏名の一覧を 設定するしかないのでしょうか? それともシートのコピー時に何かいい方法があるのでしょうか。 宜しければアドバイスをお願い致します。 OSはWindows2000Pro Excelは2000です

  • 特定の場所に特定の名前で保存するVBA

    エクセル2003を使用しているあるファイルがあります。 コマンドボタンをクリックすると「L:」→「フォルダB」→「事務所」→「000_PERSONAL」→「01」→「休暇関係」→「休暇作業予定表」→「○○○〇年休暇作業予定表」のフォルダの場所にエクセル2003形式で保存したいと思います。 この時、「L:」→「フォルダB」→「事務所」→「000_PERSONAL」→「01」→「休暇関係」→「休暇作業予定表」までは既にフォルダを作成していますが、最後の「○○○〇年休暇作業予定表」は作成していません。 ○○○○の所には現在の年度を自動記入し、コマンドボタンを押すと自動でフォルダを作成出来る様なVBAにしたいです。※既にフォルダが作成されている場合は作成しない様にします。 保存するエクセルファイル名は、あるファイルのE1セルに「▽▽▽▽年▽▽月▽▽日」と記入されているので、「▽▽▽▽年▽▽月▽▽日休暇作業予定表」と言う名前で自動で保存したいと思います。 この様なVBAはどの様に組めば良いでしょうか?

  • 特定のセルに文字が入力されているページの印刷VBA

    エクセルVBAで質問が2つあります。 エクセルシートは改ページプレビューでページ毎の印刷範囲が見えるようになっています。 (1)コマンドボックスを押したらE4~E963又はB4~B963のセルに文字が入力されているページのみ印刷するVBAはどの様にすれば宜しいでしょうか? (2)コマンドボックスを押すとインプットボックスが表示され、その中に数字を入力したら、その入力されたページのみを印刷するVBAはどの様にすれば宜しいでしょうか?

  • エクセル VBA 日付入力?

    エクセル 2000のVBAにて簡単な 日程表を作成しています。 フォームの テキストボックス1に 10/8 を入力したら テキストボックス2には 10/15 ~ テキストボックス15には 1/21 が自動で 入力されるようにするには、どのようにすればよろしいでしょうか?

  • ユーザフォーム(VBA)で入力した内容をシートへコピーするには

    ユーザフォーム(VBA)でテキストボックスとボタンを作成しました。 このテキストボックスに入力した内容をボタンを押すことでシート1のA1セルにコピーしたいのです。こんな簡単な感じなのですが、 プログラムはどのようにしたらよいのでしょうか?教えてください。 それと、このエクセルファイルを開き、マクロを有効にするのボタンを押すと思うのですが、そのときにすでにユーザフォームが表示されているようにしたいのですが・・・どうすればいいのでしょうか? ※できたらでよいのですが、もう一つボタンを作成し『クリア』ボタンということで、テキストボックスに入力した内容だけをクリアさせるボタンも作ろうとおもうのですが、それはどうしたらよいのでしょうか? 困っています。教えてください。

  • エクセルVBA チェックボックスについて

    VBA初心者です。 あるシート(セル)に作った入力用チェックボックスにチェック(TRUE)を入れたときに、別シートの特定の位置に楕円を引きたいのですが、どのようなやり方があるでしょうか。 使い方は入力用シートと印刷用シートを分けて、入力用シートのチェックボックスの状態で印刷用シートの特定のセルに選択したことがわかるように楕円をつけたいというものです。 よろしくお願いします。

専門家に質問してみよう