もし出来ればすごく助かるのですが、1つのセル内に入力した数値の履歴を残すことって出来ますか?
具体的に言いますと、1つの商品に対して価格を入力するとします。しかし、その価格は変動していきます。品目数が少なければ、いくつかセルを使えばよいのですが、100品目を超えるため、1つのセル内で過去に入力した価格も参照出来るようにしたいのです。何もしてない状態では最新の価格だけが見え、どこかを押すと過去の価格も見ることが出来れば最高です・・・!(全く違うと思いますが、ドロッップダウンリストのような感じで過去の入力数値を見れればとても見やすいです。)
ご存知の方がいらっしゃいましたら、よろしくお願い致します。
No.6ベストアンサー
- 回答日時:
私的には入力シートに履歴が必要かが疑問です
実務に履歴は必要ないと思いますし
入力時にゴチャゴチャしていると、入力ミスしてしまいそうで
履歴は他のシートにとるようにして、履歴を取ったシートで
履歴見るなり、分析なりすればよいと思います
あくまで、私的意見ですので参考程度に
一例です
コメントを使用した例です
'前回のものと入れ替えてください
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("b2:e100"), Target) Is Nothing Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim aaa As String
aaa = Target.Address
If Worksheets("sheet2").Range(aaa).Value = "" Then
Worksheets("sheet2").Range(aaa).Value = Target.Value
Else
Worksheets("sheet2").Range(aaa).Value = Target.Value & vbLf & Worksheets("sheet2").Range(aaa).Value
End If
With Target
If Not .Comment Is Nothing Then .ClearComments
.AddComment "履歴" & vbLf & Worksheets("sheet2").Range(aaa).Value
.Comment.Visible = False
.Comment.Shape.TextFrame.AutoSize = True
End With
End Sub
hige_082 様
私の質問に対して何度もお時間を取ってくださり、本当にありがとうございました。
作ってくださったもので、理想としていたものが出来ました。コメントとして履歴が入るようしてくださっているので、いらない部分は削除したり、編集できたり・・・と、とても便利です。別のシートで履歴を見られるのもとても助かります。
本当にお世話になりました。感謝の限りです。ありがとうございました。
No.5
- 回答日時:
fujillin様 補足有難う御座います
いつも、的確な回答参考にさせて戴いております
fujillin様の回答にもありますように、私としても業務に使用するのに
このような方法は、良い方法では無いと思います
#3の最初にも書きましたが
>本当に必要なのか疑問ですが(表示方法など)
の理由が、ドロップダウンリストは入力を簡単にするものです
本来、データを表示するものではないので、ちょっとした操作のミスで
データが変更されてしまいます、したがって、今回のような条件での
使用は避けた方が良いと思います、実務では正確性が求められると思う
以上、余りお薦めしませんが
fujillin様の意見を取り入れたものを作ってみましたが
実務には、よーく考えて使用してくださいね
'ワークシートモジュールへ
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("b2:e100"), Target) Is Nothing Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim aaa As String
aaa = Target.Address
If Worksheets("sheet2").Range(aaa).Value = "" Then
Worksheets("sheet2").Range(aaa).Value = Target.Value
Else
Worksheets("sheet2").Range(aaa).Value = Worksheets("sheet2").Range(aaa).Value & "," & Target.Value
End If
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Worksheets("sheet2").Range(aaa).Value
.ShowInput = False
.ShowError = False
End With
End Sub
hige_082様
お世話になります。再度のご回答を本当にありがとうございます。作ってくださったものを使い、表を作ってみました。私の思い描いていたことが出来、本当に感動だったのですが、ご回答に書いてくださっていたように、確かにちょっとした操作のミスによりデータが変更されてしまう点では危ないかと思います。
もし、入力履歴データを見れるだけのリストを出す方法(データは選べない)方法があれば教えていただけないでしょうか。。。?せっかくご回答くださっているのに新たに希望を出してしまい、本当に申し訳なく思います。またお時間あるときでよいですので、よろしくお願い致します。
今回教えてくださった方法も素晴らしいので、別のデータ処理の際には是非使わせていただこうと思います。
No.4
- 回答日時:
No2です。
No3様の回答は各列を記録用に利用する方式になっていますので、現状は、記録を残したいセルが1箇所/列みたいになっています。
(Sheet2の記録の内容を見てみればわかるはず)
A1:E100みたいに、ある範囲のセル全部にこの機能を付加したい場合は、記録の方法を(No2にも書きましたように)1セル内にまとめてしまうか、あるいは記録保存の個数を制限しておいて(例えば100個)、1行目の記録はSheet2の1~100行に、2行目の記録は101~200行に記録しておく、みたいになるように修正してあげればよいでしょう。(列側で同様の処理でも同じですが)
もともとの情報が不足なので、方法的なサンプルとしてご提示なさったものだと思われます。
あえて言うなら、Sheet_Changeのイベントが良いのかSaveのイベントが良いのかの疑問くらいか。
Sheet_Changeだと、誤入力でリターンキーを押したり、セルを移動したりすると、それも記録に残ってしまう。その一方で入力が即座に反映されるというメリットもある。
もとの情報をもっと詳しく書くべきでした・・・たくさんアドバイスをしてくださっているのに申し訳ないです。
今からでは遅いかもしれませんが・・・
A列 B列 C列 D列 E列
1行目 品名 卸1 卸2 卸3 卸4
2行目 … 価格 価格 価格 価格
3行目 …
といった感じで1つの品に関して、各卸の価格を入力します。そして、卸価格の変動があるのでその履歴を残したいのです。
そして、わがままですが、各品毎に、条件付き書式で最小値を表示できるようにしたいです。
ここまでするのは無理でしょうか・・・
素人で勉強不足のため、なかなか理解が遅いのですが、もし方法があれば教えてください。よろしくお願いします。
No.3
- 回答日時:
詳細が不明(シート名、セルアドレスなどなど)
本当に必要なのか疑問ですが(表示方法など)
面白そうなので作ってみました
条件はSheet1のA1~E1までしか対応させてません
Sheet2へ履歴を記録します
新規ファイルで試してみてください
Sheet1のシートタブを右クリックし、コードの表示を選択
ワークシートモジュールが現れるのでコピペ
画面を閉じて、Sheet1のA1~E1に入力してみてください
'ワークシートモジュールへ
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("a1:e1"), Target) Is Nothing Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim aaa As String
Worksheets("sheet2").Cells(1, Target.Column).Insert Shift:=xlDown
Worksheets("sheet2").Cells(1, Target.Column).Value = Target.Value
aaa = "=INDIRECT(""Sheet2!" & Worksheets("sheet2").Range(Worksheets("sheet2").Cells(1, Target.Column), Worksheets("sheet2").Cells(Rows.Count, Target.Column).End(xlUp)).Address(0, 0) & """)"
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=aaa
.ShowInput = False
.ShowError = False
End With
End Sub
後はご自由に
本当にありがとうございます!!ドロップダウンリストのように▼が出て入力履歴を見られる上に、条件付き書式(最小値を出すため)も使えて、したかったことが全て出来ました。すごいですね!!!
これを、A1:E1だけでなく、範囲を広げたい場合は、
「If Intersect(Range("a1:e1"), Target) Is Nothing Then Exit Sub If Target.Value = "" Then Exit Sub」
の(Range("a1:e1")を、希望の範囲(Range("a1:e100")にすればよいのかなあ・・・と思い、してみたのですが、これでは行1はうまくいくのですが、行2以降は行1の数値が履歴として表示されてしまい、うまくいきませんでした。
本当にお手数をお掛けして申し訳ないのですが、範囲を広げる方法を教えていただけないでしょうか?
よろしくお願い致します。
No.1
- 回答日時:
早々のご回答をありがとうございます。
さっそく試してみました!!
すると、1つ前の履歴は見ることが出来るのですが、それ以前のものは消えていってしまいました・・・。もし、全ての履歴を残せる方法があれば教えてください。
再度の質問になりますが、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- メルカリ メルカリの出品者に過去出品履歴が無い場合。 2 2022/12/07 22:47
- Excel(エクセル) IFERROR、SMALL関数について 2 2022/08/22 23:40
- 日本語 読解力の質問です(Excel含む) 12 2022/08/02 13:25
- 大学受験 大学の志望理由の添削をお願いします! 私は将来起業をしたいと考えております。 そのため貴学の商学 部 7 2022/09/17 14:45
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
Gメールの内容をスプレッドシ...
-
エクセルで別シートにある各々...
-
エクセルのIF関数がうまくいき...
-
エクセル 1つのセル毎に入力...
-
エクセルの関数を連続コピー
-
EXCELで2つの数値のうち大きい...
-
エクセル初心者です 関数の入れ...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルで、2種類のデータを...
-
LOOKUP関数を使えばいいのでし...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセル 文字数 多い順 並...
-
VBAで文字列を数値に変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
Excel VBAのComboboxのRemoveItem
-
Gメールの内容をスプレッドシ...
-
エクセルのIF関数がうまくいき...
-
EXCEL(エクセル)で0.001以下...
-
エクセルで重複するセルを削除...
-
エクセルの関数を連続コピー
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
おすすめ情報