- ベストアンサー
Excelである条件下で指定セルの内容をクリアし
Bookを開いた際に、ある条件下で指定のセルの値をクリアしたいと考えています その条件とは TODAY関数で日付を表示してるのですが、最後にBookを開いた日付と上記の表示されている日付が異なる場合というものです (1)Bookを閉じる際に日付を取得し、どこかに保存しておく (2)次に開いた際に(1)の日付と比較して異なれば指定セルの値をクリア このような流れになるのかな?と考えているのですが未熟な為、方法がわかりません もしよい方法があればご教示いただけると有難いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>その条件とは… ●前回ブックを「開いた」時 ●前回ブックを「閉じた」時 ●前回ブックを「保存した」とき ホントは何をしたいのか、そして「実際には」何が出来たらいいのかに応じて、簡単にもメンドクサクも如何様にもなります。 作成例: ブックを(ご利用のエクセルのバージョンに応じて必要に応じてマクロ付きブックで)保存する 改めてブックを開く ブックを、エクセルウィンドウの中で最大化ではない状態で開く ブックウィンドウの左上、ブック名の左隣のアイコンを右クリックしてコードの表示を選ぶ (若しくは当該のブックのThisWorkbookシートを開く) 現れたシートに下記をコピー貼り付ける private sub Workbook_BeforeClose(Cancel as boolean) thisworkbook.save end sub private sub Workbook_Open() if datevalue(thisworkbook.builtindocumentproperties("Last Save Time")) <> date then worksheets("Sheet1").range("A1").clearcontents '指定シートの指定セルをクリア end if end sub ブックを閉じて開きなおす。
その他の回答 (2)
- mar00
- ベストアンサー率36% (158/430)
A_No.1です。 回答に書き忘れたのですが ブックにシートが1つしかないことが前提です。
- mar00
- ベストアンサー率36% (158/430)
Altキー+F11キーを押す ThisWorkbookをダブルクリックして以下を貼り付けて下さい。 Private Sub Workbook_Open() If Range("A1") <> Range("B1") Then 'クリアする処理 End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Range("B1") = Date End Sub クリアする場所がわからないので、'クリアする処理の部分を変更して下さい。 TODAY関数が入っているセルをA1、最後にBookを開いた日を入れるセルをB1にしています。 適宜修正して下さい。 最後にBookを開いた日を入れるセルを表示したくない場合は、書式設定すればいいと思います。
お礼
参考にさせて頂きました ありがとうございました。
お礼
したい事は、朝にbookを開いた際に前日の入力をクリアしたいというだけです なので、前回の保存か閉じた状態から比較できればいいのかな?と考え質問した次第です。 回答頂きましたコードでやりたい事は達成できそうなのですが クリアしたいセルが結合セルなので 下記の部分を worksheets("Sheet1").range("A1").MergeArea.clearcontents このように書き換えてみたら大丈夫だったのですが、また一つ問題が発生してしまいました。 というのもクリアしたいセルが複数(10セルほど)あるためです 上記のように一つのセルであれば動作するのですが worksheets("Sheet1").range("A1,C1,E1").MergeArea.clearcontents のように複数指定するとエラーが出てしまいます。 何か記述の仕方が間違っているのでしょうか? お手数ですが再度ご教示いただけますと幸いです。