- ベストアンサー
エクセル メッセージボックスの表示
別シートにある集計表を月末になったら手動でデータを削除するのですがやえもすると忘れてしまう可能性があるためメッセージボックスで’削除しましたか?’という注意喚起をだすようにしていますがエクセルを立ち上げる毎に出てしまいうっとうしく感じる事もあります。そこで表示後OKをしたら次月初まで出ないようにする事は可能でしょうか? 何分VBA初心者な者でお手数おかけしますがご教示ください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
セルI7:年、J7:月、K7:日だけを入れたシートでJ7に2としたり1とか3とかしたりしてそれぞれどうなるのかテストしてみればいかがですか。
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1742/2617)
> セルI7:年、J7:月、K7:日を設定しており、その月の変化に対したいと思います。 そこを書き替えていいんですか? 書き替えないと 「表示後OKをしたら次月初まで出ない」とはならず Yesをクリックしても何らかの方法で書き替えない限り毎回でますよ。 設定しているその月が当月ではない場合にメッセージを出すとい前提です。 翌月限定 If Month(DateAdd("M", 1, DateSerial(Range("I7").Value, Range("J7").Value, Range("K7").Value))) = Month(Date) Then '書き替えないのなら以下は単純にMsgBoxだけでいいです。 If MsgBox("削除しましたか?", vbYesNo + vbQuestion) = vbYes Then Range("I7").Value = Year(Date) Range("J7").Value = Month(Date) Range("K7").Value = Day(Date) End If End If もしくは 当月と違う場合 If Range("J7").Value <> Month(Date) Then '書き替えないのなら以下は単純にMsgBoxだけでいいです。 If MsgBox("削除しましたか?", vbYesNo + vbQuestion) = vbYes Then Range("I7").Value = Year(Date) Range("J7").Value = Month(Date) Range("K7").Value = Day(Date) End If End If そこの日付を変更せずにYesをクリックしたかどうかだけたとえばA1にクリックした月を記載しておけばYesをクリックしたら翌月までメッセージは出ません。 If Range("J7").Value <> Month(Date) And Range("A1").Value <> Month(Date) Then If MsgBox("削除しましたか?", vbYesNo + vbQuestion) = vbYes Then Range("A1").Value = Month(Date) End If End If
補足
ご丁寧にありがとうございます。 もう少し検討させて頂きます。
- kkkkkm
- ベストアンサー率66% (1742/2617)
回答No.1の一部訂正です。 前回Yesをクリックした月の翌月限定で出すときに 12月の翌月1月の場合を考えていませんでしたので以下に訂正です。 If Range("A1").Value = "" Or Month(DateAdd("M", 1, Range("A1").Value)) = Month(Date) Then If MsgBox("削除しましたか?", vbYesNo + vbQuestion) = vbYes Then Range("A1").Value = Date End If End If
補足
早速ご回答頂き大変ありがとうございます。 説明不足で申し訳ありませんでしたが日付はたとえばセルI7:年、J7:月、K7:日を設定しており、その月の変化に対したいと思います。 度々申し訳ありませんが対応いただければ幸いです。 よろしくお願いします。
- kkkkkm
- ベストアンサー率66% (1742/2617)
現状のメッセージボックスを表示しているところを以下ようにしてみてください。 以下の Range("A1")をどこか適当な人に書き替えられないだろうというセルを指定してそこにYesをクリックした月を書き込むようにします。 ですのでブックを保存しない限りYesをクリックした月は前回の状態のままとなります。 前回Yesをクリックした月の翌月限定で出すのでしたら If Range("A1").Value = "" Or Range("A1").Value + 1 = Month(Date) Then If MsgBox("削除しましたか?", vbYesNo + vbQuestion) = vbYes Then Range("A1").Value = Month(Date) End If End If 前回Yesをクリックした月と当月が違う場合に出すのでしたら If Range("A1").Value = "" Or Range("A1").Value <> Month(Date) Then If MsgBox("削除しましたか?", vbYesNo + vbQuestion) = vbYes Then Range("A1").Value = Month(Date) End If End If
お礼