

複数人のスタッフで1つのエクセルファイルを管理しています。
管理方法は下記の通りです。
現在、担当しているお客様から連絡やアポイントなどがあったかを記録に残すためのexcelデータを作成しています。
1つのexcelファイルに人数分のシートを作成し、それぞれが自分のシートに毎月の連絡の有無を○×形式で記入していきます。
シート内には各自が担当している案件名と1月~12月までの見出し、備考欄などが記載されています。
それぞれのシートの内容が書き換えられた最終更新日を所定のセルに記載させたいのです。
マクロを使用して下記のような記述をしてみましたが、どれか1つのセルを変更すると全てのシートの最終更新日が同じ時間に更新されたような表記になってしまします。
複数人でエクセルファイルを管理するため、誰がいつ担当のシートを書き換えたかを記載するためにはどの様な記述をすれば良いのでしょうか?
【使用している関数】=LastSaveTime()
【記述内容】
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'イベント抑止
Application.EnableEvents = False
With Sh
If Intersect(Target, .Range("E4:P100")) Is Nothing Then GoTo EndRtn
.Range("Q2").Value = Date
End With
EndRtn:
'イベント抑止を解除
Application.EnableEvents = True
End Sub
上記の方法でシートを作成してみましたが、最終更新日を表示させるセルに
=LastSaveTime()
を記述したところ
#NAME?
と表示されてしまいました。
セルの書式設定も日付に変更しましたが変化がありません。
VBEを適用するまでの流れは下記アドレスのNo.5様を参考にさせて頂いております。
http://oshiete.goo.ne.jp/qa/4367944.html
上記の方法と今回の方法はそもそも目的としているものが違うのでしょうか?
素人目には同じような目的だと感じたので参考にさせていただいたのですが…
何度もお手数をおかけ致しますがご回答の程、宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
次の手順を行います。
1.ALT+F11でVBE画面を開く
2.今までに作成した ご質問に掲示したマクロ,lastsavetime関数のマクロ,各シートのシートモジュールに書いたマクロ,を漏れなく削除する(同じ目的の複数のマクロが競合するのを防ぎます)
3.プロジェクトエクスプローラで「VBAProject(作業をしている.xls)」の中に含まれているThisWorkbookをWクリックする
4.現れたシートに下記をコピー貼り付ける
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
’範囲外なら何もしない
if application.intersect(target, sh.range("E4:P100")) is nothing then exit sub
’そうでないならQ2に記録する
Application.EnableEvents = False
sh.range("Q2")= now
Application.EnableEvents = True
End Sub
ファイルメニューから終了してエクセルに戻る
Q2には日付時刻の表示形式を設定しておく
各シートで作業すると,Q2に日付時刻が自動で更新される。
No.6
- 回答日時:
先日も同じような質問してませんでしたか。
普通エクセルで、よく使われるような課題ではないし、本件はエクセルに適して無いように思う。
従って初心者らしい質問者には難しい課題だろう。わたしにも難しい。
>LastSaveTime()の使用など、ファイル(ブック)単位に使うものを使っていて、直ぐ不適当が判ってしまう程度のもの。
また質問の表現がしっかりしてなくて、よく情況が読み取れない。
質問を読んだついでに推測して、書いてみる。
ーー
シートごとに使用された日時を考えなければならない。そこで1つ(データシートとは別に)シートを増やして「時間管理」という名にする。
「シートを開くこと」と、「そのシートのセルにデータを書き込んだり、変更したり」することは別であるが、別のイベントのシートのChangeイベントを使う(シートの内容を変えたことは確実)のでは、
シートのセルのデータを入力したりしたら、すべての場合に反応して、処理の負荷が大きいと思い、敢えて、アバウトではあるが、シートを開いたとき(シートタブをクリックしたとき)をとらえ、そのシートの1セルに日付・時刻情報を残す。本来目立たないところのセルが良いが、テストなのでC1セルにした。
ーー
そしてブックを閉じるときに、下記VBAで、各シートのC1セルの日時時刻を「時間管理」シートに集約転記して、ブックがクローズされる。
後日この時間管理シートをみて、同じシート名を順に探れば、そのシートを開いた時刻がわかる。
これらは、ちゃちな感じがするが、思いつきだが、こんなのはどうだろう。
====
ThisWorkbookのSheetActivateイベントに
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Range("C1") = Now()
End Sub
これで開いたシートのC1セルに日時・時刻を残す。
ーーーー
ブックをクローズする前に、全シートのC1セルの時刻とシート名を、順次、使用管理シートの下の行に集約してその後クローズする。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
d = Worksheets("使用管理").Range("A65536").End(xlUp).Row
i = i + 1
For Each Sh In Worksheets
If Sh.Name <> "使用管理" Then
Worksheets("使用管理").Cells(i, "A") = Sh.Name
Worksheets("使用管理").Cells(i, "B") = Sh.Range("c1")
i = i + 1
End If
Next
End Sub
ーーーーー
自分の考えたコードばかり質問に書いている質問者が多いが、初心者は、的はヅレの方向のアイデアでコードを組み始めているケースも多い。だから役にたたないことが多い。心やさしい回答者がその線で考えてくれたとしても、良いアイデアの吸収にならず、質問者の勉強にならない。
まずやりたいことの説明を中心に、質問文章表現に心を砕くこと。
シートと行と列のデータ例
初期状態の例・最終結果の例
初期状態から最終ゴールをまでをつなぐ事項(理屈)などを、整理して表現する訓練をするほうが良い。
No.5
- 回答日時:
=LastSaveTime()は不要だと思います。
マクロの方も記述内容で正常に動作します。
もし時間まで必要であればDateをNowに変更
すればいいと思います。
No.3
- 回答日時:
まず、LastSaveTime関数の記述は
Public Function LastSaveTime() As Variant '←変更箇所
Application.Volatile
LastSaveTime = ThisWorkbook.BuiltinDocumentProperties("Last save time").Value
End Function
でよろしいでしょうか?
で、さらに Workbook_SheetChange イベントにも記述していると。
> 最終更新日を所定のセルに
ここで言う「所定のセル」とは Q2 セルの事で良いでしょうか?
Workbook_SheetChange イベントで動くマクロの内容ですが、わかりやすく言うと
「どこかのシート上のセル範囲 E4:P100 に変更が行われた時、そのシートの Q2 セルに【現在】の日付を入れる」という動作をしてくれます。変更した「今」の日付を、対象のシートのQ2セルに入れるだけなので、変更していないシートのQ2セルに日付が入る事はありません。
LastSaveTime は
「その【Excelファイル】が【最後に保存】された日付を返す」関数です。これはシート単位ではなく「ブック」=ファイル単位なので、複数のシートに入れたとしても、すべて同じ値が返ってきます。
No.2
- 回答日時:
リンク先で紹介されているユーザ関数「LastSaveTime」は、あくまでもブックの保存日時を表示するだけの物です。
また、ユーザ関数「LastSaveTime」と質問で提示されたコードの関係が良く判りません。
ユーザ関数「LastSaveTime」は今回の質問とどう関係するんでしょう?
要りませんよ。
提示されたコードで、問題なく各シートのQ2セルに更新した日付が入りました。
ちゃんとThisWorkBookにコード書いていますか?
何かマクロの基本が判っていないのにネット上で集めたコードを切り貼りしてドツボにはまって居る様な印象です。
No.1
- 回答日時:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Intersect(Target, Range("E4:P100")) Is Nothing Then GoTo EndRtn
Range("Q2").Value = Date
EndRtn:
'イベント抑止を解除
Application.EnableEvents = True
End Sub
をそれぞれのシートのマクロに記載してください。
=LastSaveTime()
は不要です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
このQ&Aを見た人はこんなQ&Aも見ています
-
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
エクセルでファイルの最終更新日を自動入力したい
Excel(エクセル)
-
Excel2013でシート毎に更新日を設定したい
Excel(エクセル)
-
-
4
【エクセル】行の最終更新日を、あるセルに自動で入力させる方法。
Excel(エクセル)
-
5
Excelでシート名と最終更新日を自動表示したい
その他(Microsoft Office)
-
6
マクロ無しで時間自動で記入をしていきたい
Excel(エクセル)
-
7
エクセル マクロ等を利用した各列ごとのセル最終更新日の自動入力について
Excel(エクセル)
-
8
excelでシート毎の最終更新日を所定の場所に表示
Excel(エクセル)
-
9
Excelで更新日時と更新者を表示させる
Excel(エクセル)
-
10
ハイパーリンクされているファイルの更新日付を取得するユーザー関数
Visual Basic(VBA)
-
11
エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります
Excel(エクセル)
-
12
自分の部署・担当を言うとき、どういう言い方が正しいでしょうか?? 会社のときは、弊社といいますが、部
その他(ビジネス・キャリア)
-
13
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
14
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
15
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
16
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
17
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
18
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
19
エクセルのシート毎に日付
Excel(エクセル)
-
20
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルで前シートを参照して...
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
エクセルでファイルを開いたと...
-
EXCEL:同じセルへどんどん足し...
-
特定のシートの削除を禁止した...
-
Excel、同じフォルダ内のExcel...
-
エクセルで前のシートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルで複数シートを別のシ...
-
エクセルで「ウィンドウを元の...
-
VBAでシートコピー後、シート名...
-
複数シートの特定の位置に連番...
-
EXCELで1ヶ月分の連続した日付...
-
VBAで条件によりフォントサイズ...
-
Excelのシートを、まとめて表示...
-
エクセル 計算式も入っていない...
-
複数のシートの同じセルに入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
前の(左隣の)シートを連続参...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
特定のシートの削除を禁止した...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルで前シートを参照して...
-
エクセル 計算式も入っていない...
-
EXCEL:同じセルへどんどん足し...
-
Excel、同じフォルダ内のExcel...
-
複数シートの特定の位置に連番...
-
エクセルVBAでパスの¥マークに...
-
Excelのシートを、まとめて表示...
-
VBAで条件によりフォントサイズ...
-
【Excel関数】値が合致するセル...
-
Accessのスプレッドシートエク...
-
エクセルで前のシートを連続参...
-
VBAでシートコピー後、シート名...
-
EXCELで1ヶ月分の連続した日付...
-
シートの保護のあとセルの列、...
おすすめ情報