- ベストアンサー
Excelでシート名と最終更新日を自動表示したい
- Excelを使用して、セルA1に入力した名前をシート名として表示し、セルH1に最終更新日を自動的に入力したいです。
- セルB1に入力された値を使用して、ワークシートの名前を変更するためにWorksheet_Change関数を使用します。また、Workbook_BeforeSave関数内で、ワークシートのH1セルに現在の日付を入力することもできます。
- Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ThisWorkbook.Saved = False Then Worksheets("Sheet1").Range("H1").Value = Date End If End Sub というコードを組み合わせて使用することができます。ただし、注意点として、カスタムコンテンツによって正しい動作が妨げられる可能性があるため、他のコードとの競合やセキュリティ上の問題がないかを確認することが重要です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
それぞれのマクロを正しく使用しなければ動きません。闇雲にコピーしましたでは,ダメです。 1のマクロは次のようにします http://excelvba.pc-users.net/fol3/3_6.html 2のマクロは次のようにします http://excelvba.pc-users.net/fol4/4_5.html 別の方法: シートのマクロは,シート名タブを右クリックしてコードの表示を選んで記述します。 これはご質問で見つけてきたやり方ですね。いわずもがなですが,シートのマクロを効かせたい「正しいシート」に登録しなければ動きません。 ブックのマクロは,ブックをエクセルウィンドウの中で最大化ではない状態にしてから,ブックウィンドウのタイトルの左端のブック名の左隣りのアイコンを右クリックしてコードの表示を選び,現れたシートに記述します。
- mshr1962
- ベストアンサー率39% (7417/18945)
別サイトの過去の質問ですが 「エクセルの最終更新日自動入力について」 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1418194819
補足
回答ありがとうございます。 このサイトは、質問文のコードで試すまでに 既に読んでおりまして 今回もう一度 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Set Rng = Range("H1") On Error GoTo ErrHandler Application.EnableEvents = False Rng.Value = Date ErrHandler: Application.EnableEvents = True End Sub を入力してみましたが そもそも何もH1には出てきません。 (A1には既にシート名になるものを入れてあり、シート名はA1のものが入っています) すみません、ド素人なんです。 力技で、質問文の内容までこぎつけたレベルです。。
- kybo
- ベストアンサー率53% (349/647)
Workbook_BeforeSaveは「ThisWorkbook」に記述してみて下さい。
補足
回答ありがとうございます。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub ThisWorkbook(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ThisWorkbook.Saved = False Then Worksheets("Sheet1").Range("H1").Value = Date End If End Sub にして、保存し 一旦閉じてから開いて 適当なセルに入力して保存しても何もでてきませんでした。。。
お礼
再度自力で調べ、解決しました! 今後このページをご覧になる方へ念のため書き記します。 まず (1)セルA1に入れた名目をシート名にする シート名を右クリックして「コードの表示」から Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("A1") End Sub (2)セルH1には、最終更新日を自動で入れる シート名を右クリックして「コードの表示」から 開いたウィンドウの上部にある「挿入」→「標準モジュール」を選びます。 すると標準モジュールが追加されるので、 左側には、 プロジェクト - VBAProject -■VBAProject(Book1) -□MicrosoftExcelObject │├Sheet1(Sheet1) │├Sheet2(Sheet2) │├Sheet3(Sheet3) │└ThisWorkbook -□標準モジュール └Module1 と「標準モジュール」部分が追加されているはずです。 そして、新しく開いたウィンドウの部分に Public Function LastSaveTime() As Variant Application.Volatile LastSaveTime = ThisWorkbook.BuiltinDocumentProperties("Last save time").Value End Function をコピペ。 最後に、更新日付を表示させたいセル(今回だとH1)に =LastSaveTime() をコピペ。 不思議な数字の配列が表示された場合は 「セルの書式設定」の表示から「日付」で 好みのものを選び(2011/7/23とか)ます。 すると、できました! 教えていただいた 「ThisWorkbook」の操作から解決はできませんでしたが 二度もご回答いただきましたので、 ベストアンサーはkybo さんにしたいと思います! どうも、ありがとうございました★
補足
回答ありがとうございます。 ただ、どうしても解決しません。。。 教えていただいた画面から「ThisWorkbook」をダブルクリックして 新しく開いた画面に ■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■ Private Sub ThisWorkbook(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ThisWorkbook.Saved = False Then Worksheets("Sheet1").Range("H1").Value = Date End If End Sub ■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■ そして もともと入れていた画面に □ □ □□ □ □□ □ □□ □ □□ □ □□ □ □ Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub □ □ □□ □ □□ □ □□ □ □□ □ □□ □ □ と入れましたが…、 シート名は相変わらずかわるものの 最終更新日が入りません。。。 コードの中のシート名は、 変更後のシート名(コードで指定したもの)を入れなくてはならないのでしょうか? つまり、シート名をB1で「りんご」と入れた場合 ■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■ Private Sub ThisWorkbook(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ThisWorkbook.Saved = False Then Worksheets("りんご").Range("H1").Value = Date End If End Sub ■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■ と入れるのでしょうか? 試しにやってみたんですが、変わりませんでしたが。。。 〝ThisWorkbook”も、〝りんご″に変えた方がいいんでしょうか?