
質問です
エクセルで、各列の個数の増減の最終更新日が自動で入力されるシートを作りたいです。
添付した画像のような構成で、個数のセルにはオートSUMでF以降の個数の増減が各列に入っています。この個数セルの表示が変わった時に最終更新日が更新されるようにするにはどうすればよいのでしょうか?
検索してマクロを用いた最終更新日の入力を探して真似しましたが、参照するのが式の入ってるセルであるせいか、最終更新日が変わらないシートになってしまいます。
式の表記を参照するのが無理なのであれば、F列以降の変更があるごとに最終更新日が反映される構成でも大丈夫です。
もし、詳しい方がおられたらご教授願います。コピペで使えるコード等教えていただけると幸いです。

A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.2です。
前回のVBAの回答で、解説に合わせてシートモジュールのVBAコードを修正したつもりだったのですが、修正前のコードを投稿してしまい、結果として解説とコードに相違があるものになっていました。
修正後のコードを投稿してお詫びいたします。なお、ブックモジュールに修正はありません。
Dim col() As Long
Dim d() As Variant
Private Sub Worksheet_Activate()
Dim r As Long
Dim i As Long
r = Cells(Rows.Count, 1).End(xlUp).Row
ReDim col(r)
ReDim d(r)
For i = 2 To r
col(i) = Cells(i, Columns.Count).End(xlToLeft).Column
If Cells(i, 3).Value = "" Then
d(i) = ""
Else
d(i) = Cells(i, 3).Value
End If
Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Or Target.Count > 1 Then Exit Sub
If Target.Column < 6 Then Exit Sub
Application.EnableEvents = False
If Target.Value <> "" And col(Target.Row) + 1 = Target.Column Then
Cells(Target.Row, 3).Value = Date
Else
If Target.Value = "" And col(Target.Row) + 1 = Target.Column Then
Cells(Target.Row, 3).Value = d(Target.Row)
End If
End If
Application.EnableEvents = True
End Sub
No.3
- 回答日時:
No.2です。
前回回答でマクロを使用した例をお示ししましたので、関数を使用した例もお示ししておきます。
添付画像のように、各名称ごとに、数値を入力するセルに対して、1行目に予め連続日付入力しておいて(あるいは変動のあった日付を入力して)から、数値を入力するルールとします。
従って名称によっては変動の無い日があるため空欄が発生します。
こうすると、各名称の数値が入力されている最右列の日付が最終更新日付になります。
それを関数で表示させるようにします。例えばF列からZ列までが入力可能だとすると、C2に記述する数式は
=IFERROR(INDIRECT("R1C"&MAX(INDEX(($F2:$Z2<>"")*(COLUMN($F2:$Z2)),0)),0),"")
となり、これを下方向へオートフィル等でコピーします。
添付画像を参照してください。

No.2
- 回答日時:
ご質問者が最終更新日を自動表示しようとしているシートが、仮にsheet1だとすると、sheet1のシートモジュールに以下のvbaを記述します。
Dim col() As Long
Dim d() As Variant
Private Sub Worksheet_Activate()
Dim r As Long
Dim i As Long
r = Cells(Rows.Count, 1).End(xlUp).Row
ReDim col(r)
ReDim d(r)
For i = 2 To r
col(i) = Cells(i, Columns.Count).End(xlToLeft).Column
If Cells(i, 3).Value = "" Then
d(i) = ""
Else
d(i) = Cells(i, 3).Value
End If
Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Or Target.Count > 1 Then Exit Sub
If Target.Column < 6 Then Exit Sub
Application.EnableEvents = False
If Target.Value <> "" And col(Target.Row) < Target.Column Then
Cells(Target.Row, 3).Value = Date
Else
If Target.Value = "" And Target.Column > col(Target.Row) Then
Cells(Target.Row, 3).Value = d(Target.Row)
End If
End If
Application.EnableEvents = True
End Sub
残念ながら、新しいウィンドウが開くときはWorksheet_Activateイベントが発生しないので、最終更新日を自動表示しようとしているシートの他に、空のシートでよいのでダミーのsheet2を用意します。そのうえで、sheet1のWorksheet_Activateイベントを発生させるため、ブックモジュールに以下のvbaを記述します。
Private Sub Workbook_open()
ThisWorkbook.Worksheets(2).Activate
ThisWorkbook.Worksheets(1).Activate
End Sub
このマクロでは、ブックを開いたときに保存されていた状態の最終更新日と入力各行の最右列の列数を取得し、Worksheet_Changeイベントで、最右列の一つ右側のセルが更新されたら、最終更新日を更新します。ただし、行を間違って入力してしまった場合を考え、保存時の最右列より一つ右のセルをクリアすると最終更新日は保存時のものに戻ります。
つまり、このマクロは、りんご、ぶどうなどの一つの名称が一日に使うセルは一つだけという前提です。
一つの名称が一日にセルを複数使用してよいという前提だとすると、このマクロでは一旦ブックを保存してから、再度ブックを開いて作業することになります。
No.1
- 回答日時:
こんばんは、
>コピペで使えるコード等教えていただけると幸いです。
ここは、依頼をする場ではありませんが、、自己学習でサンプルを
ご質問の内容がイマイチわかりませんが、
仕様として、Excelを開いた時と作業をされて閉じる時のE列の数値の違いで
閉じる時の日付をC列の対象行に書き込みを行えれば良いのでしょうか?
解釈が違うかも知れませんが、参考として
ThisWorkbookモジュールに
Option Explicit
Dim MyAry As Variant
Const SH_NAME As String = "Sheet1"
Private Sub Workbook_Open()
Dim sh As Worksheet
Set sh = Sheets(SH_NAME)
MyAry = sh.Range("E2:" & "E" & sh.Cells(Rows.Count, "E").End(xlUp).Row)
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long
Dim ChAry As Variant
Dim sh As Worksheet
Set sh = Sheets(SH_NAME)
ChAry = sh.Range("E2:" & "E" & sh.Cells(Rows.Count, "E").End(xlUp).Row)
For i = 1 To UBound(MyAry)
If MyAry(i, 1) <> ChAry(i, 1) Then
sh.Cells(i + 1, "C").Value = Date
End If
Next i
End Sub
"Sheet1"は、対象のシート名に変更してください。
コピペしたら 保存して Private Sub Workbook_Open()をF5などで実行してください。
E列の値が変わる作業を行い、閉じてください。(保存する)
書き込みは閉じるときに実行されます。
閉じたブックを再度 開いてみてください。
検証はコピーファイルなどで行い自己責任でお願いします。
Qchan1962さん、回答ありがとうございます。
解釈していただいたその通りです、思っていた機能を持ったシートが出来ました。ありがとうございます。
また近々シートを作らなければいけないので、教えていただいた内容を参考にして自分で作ってみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) Excelの複数人での参照について 2 2022/06/01 13:38
- Excel(エクセル) 同じ品番のマスタで最新日付のものに〇印を入れたい 3 2023/03/31 17:45
このQ&Aを見た人はこんなQ&Aも見ています
-
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
【エクセル】行の最終更新日を、あるセルに自動で入力させる方法。
Excel(エクセル)
-
エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります
Excel(エクセル)
-
-
4
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
5
エクセルでファイルの最終更新日を自動入力したい
Excel(エクセル)
-
6
☆Excelエクセルで入力した日の日付を表示したいです☆
Excel(エクセル)
-
7
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
8
excelでシート毎の最終更新日を所定の場所に表示
Excel(エクセル)
-
9
【エクセル】補足質問:行の最終更新日を、あるセルに自動で入力させる方法。
Excel(エクセル)
-
10
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel関数】UNIQUE関数で"0"...
-
特定の文字がある行以外を削除...
-
エクセルで特定の文字列が入っ...
-
Excelのフィルター後の一番上の...
-
エクセル 上下で列幅を変えるには
-
エクセルのマクロで意図しない...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
Excel2007で、指定範囲の行高さ...
-
エクセルで株の分析をしていま...
-
エクセルで数字を認識して、行...
-
連続データが入った行の一番右...
-
excelのデータで色つき行の抽出...
-
Excel:いまフォーカスがあるセ...
-
EXCELで最後の行を固定
-
セルに値が入力されると隣りの...
-
エクセル マクロ オートフィ...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセルマクロ オートSUM(合...
-
excel 小さすぎて見えないセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル 上下で列幅を変えるには
-
[EXCEL]ボタン押す→時刻が表に...
-
Excelのフィルター後の一番上の...
-
エクセルで特定の文字列が入っ...
-
excelのデータで色つき行の抽出...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
結合されたセルをプルダウンの...
-
エクセル マクロ オートフィ...
-
excel 小さすぎて見えないセル...
-
Excel ウインドウ枠の固定をす...
-
EXCELで最後の行を固定
-
電話番号の入力方式が違うデー...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセル 時間の表示形式AM/PM...
-
連続データが入った行の一番右...
-
Excelで非表示のセルをとばして...
おすすめ情報