質問です
エクセルで、各列の個数の増減の最終更新日が自動で入力されるシートを作りたいです。
添付した画像のような構成で、個数のセルにはオート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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
夏が終わったと感じる瞬間って、どんな時?
まだまだ暑い今日この頃。 しかしながら、もう夏は終わっている!……はず。 あなたが思う「夏が終わった!」エピソードを教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
【エクセル】行の最終更新日を、あるセルに自動で入力させる方法。
Excel(エクセル)
-
エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります
Excel(エクセル)
-
-
4
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
5
☆Excelエクセルで入力した日の日付を表示したいです☆
Excel(エクセル)
-
6
excelでシート毎の最終更新日を所定の場所に表示
Excel(エクセル)
-
7
excelでシート毎の最終更新日を所定の場所に表示
Excel(エクセル)
-
8
EXCEL:特定の文字が入力された日付を表示する方法
Excel(エクセル)
-
9
Excelでシート名と最終更新日を自動表示したい
その他(Microsoft Office)
-
10
マクロ無しで時間自動で記入をしていきたい
Excel(エクセル)
-
11
エクセル セルに文字を入力したら別のセルに入力した時間が表示されるようにしたい
Excel(エクセル)
-
12
【エクセル】補足質問:行の最終更新日を、あるセルに自動で入力させる方法。
Excel(エクセル)
-
13
Excel2013でシート毎に更新日を設定したい
Excel(エクセル)
-
14
データが入力されている隣のセルに当日日付と時刻を入力するExcel VBAプログラム
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
特定の文字がある行以外を削除...
-
[EXCEL]ボタン押す→時刻が表に...
-
Excelのフィルター後の一番上の...
-
excelのデータで色つき行の抽出...
-
アクティブになっている行をマ...
-
エクセル マクロで数値が変っ...
-
結合されたセルをプルダウンの...
-
エクセル 時間の表示形式AM/PM...
-
Excel ウインドウ枠の固定をす...
-
VBAで色の付いているセルの行削除
-
Excel グラフのプロットからデ...
-
罫線の斜線を自動で引くマクロ
-
excel 小さすぎて見えないセル...
-
エクセルマクロで偶数行(又は...
-
エクセル マクロ オートフィ...
-
エクセルで昨日までの日付デー...
-
サイズの違うセル 並べ変え
-
エクセル 上下で列幅を変えるには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
VBAで色の付いているセルの行削除
-
Excel グラフのプロットからデ...
-
エクセル マクロ オートフィ...
-
エクセル マクロで数値が変っ...
-
エクセルのセルに指定画像(.jpg...
-
結合されたセルをプルダウンの...
-
AのセルとB行を比較して、一致...
-
罫線の斜線を自動で引くマクロ
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
Excel2007で、指定範囲の行高さ...
-
サイズの違うセル 並べ変え
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
-
エクセル 時間の表示形式AM/PM...
おすすめ情報