質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

1回答

2305閲覧

Excel2010 内容を変更して上書き保存した日をセルに出力

Yoshikun_0945

総合スコア224

0グッド

0クリップ

投稿2017/10/22 00:48

#実現したいこと

Excel2010において、上書き保存したタイミングで、内容(書式設定だけとかセルの設定だけを含む)が変更されたか調べ、内容が変更された場合には変更日をセルに出力することはできますでしょうか?

ネットで調べているのですがいまいち分からなくて

変更したか調べるシートは複数枚あり(1)(2)(3)というid形式で指定したいと思っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

一般的なExcelのシート機能だけで実現するのは難しいと思いますが、VBAマクロを利用すれば実現できると思います。
今回の質問にVBAのタグはついていませんでしたが、VBA利用でのアドバイスをさせていただきます。

保存のタイミングでマクロ処理

ブックを保存するタイミングでマクロを実行したい場合は、対象のブックのBeforeSaveイベントを利用します。
VBE(VisualBasicEditor)の画面で対象ブックのThisWorkBookを開き、Workbook_BeforeSaveイベントに実行したい処理を記述すれば保存のタイミングで実行されます。
⇒参考

変更のチェック

シート内容を変更した際には、対象シートのイベントとしてChangeイベント、またブックのイベントとしてSheetCangeイベントが発生します。
今回は各シート共通の処理となるので、ブックのSheetChangeイベントを利用すればいいと思います。

保存する時ではなくシート内容変更時にその時刻をセル出力するのでよければ、Workbook_SheetChangeイベントで変更されたシートに日時を出力してしまえば手っ取り早いです。
※この場合、保存される時間は最終変更日時になります。
(保存するまでに複数のシートを変更した場合、シート毎に最後に編集した時間が保存されます。)

あくまで保存のタイミングで日時を出力したいのであれば、SheetChangeイベントでは日時を空欄で出力するなどしておき、先に紹介したBeforeSaveイベントのタイミングで全シートで日時が空欄になっているセルに保存日時を出力する、といったことを行えばよいと思います。
※この場合、保存される時間は変更を保存した日時になります。
(保存するまでに複数のシートを変更した場合、保存した日時で統一されます。)

⇒参考

サンプルコード

'ブック内のシートが変更された時に発生するイベント Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'Changeイベント内でセル内容を書き換えることによって、またChangeイベントが発生してしまうため、 '処理中のイベント発生をFalseにしてからセル出力します。 Application.EnableEvents = False '変更のあったシートのC1セルを空欄にします。 Sh.Range("C1").Value = "" ''変更のあったシートのC1セルに現在日時(編集日時)を出力します。 ''⇒この場合、保存のタイミング(BeforeSaveイベント)では特に処理する必要はありません。 'Sh.Range("C1").Value = Now Application.EnableEvents = True End Sub 'ブックが保存される前に発生するイベント Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim sht As Worksheet 'BeforeSave処理中のイベント発生をFalseにしてからセル出力します。 Application.EnableEvents = False 'ブック内のすべてのシートをループ処理 For Each sht In Me.Worksheets If sht.Range("C1").Value = "" Then 'C1セルが空欄だったら現在日時(保存日時)を出力します。 sht.Range("C1").Value = Now End If Next Application.EnableEvents = True End Sub

以上、勝手にVBAでのアドバイスをさせていただきましたが、参考になれば幸いです。

投稿2017/10/23 03:26

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問