• ベストアンサー

エクセル 1つのセル毎に入力履歴(数値)を表示する方法ありますか?

もし出来ればすごく助かるのですが、1つのセル内に入力した数値の履歴を残すことって出来ますか? 具体的に言いますと、1つの商品に対して価格を入力するとします。しかし、その価格は変動していきます。品目数が少なければ、いくつかセルを使えばよいのですが、100品目を超えるため、1つのセル内で過去に入力した価格も参照出来るようにしたいのです。何もしてない状態では最新の価格だけが見え、どこかを押すと過去の価格も見ることが出来れば最高です・・・!(全く違うと思いますが、ドロッップダウンリストのような感じで過去の入力数値を見れればとても見やすいです。) ご存知の方がいらっしゃいましたら、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答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

tama_1003
質問者

お礼

hige_082 様 私の質問に対して何度もお時間を取ってくださり、本当にありがとうございました。 作ってくださったもので、理想としていたものが出来ました。コメントとして履歴が入るようしてくださっているので、いらない部分は削除したり、編集できたり・・・と、とても便利です。別のシートで履歴を見られるのもとても助かります。 本当にお世話になりました。感謝の限りです。ありがとうございました。

その他の回答 (5)

  • hige_082
  • ベストアンサー率50% (379/747)
回答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

tama_1003
質問者

お礼

hige_082様 お世話になります。再度のご回答を本当にありがとうございます。作ってくださったものを使い、表を作ってみました。私の思い描いていたことが出来、本当に感動だったのですが、ご回答に書いてくださっていたように、確かにちょっとした操作のミスによりデータが変更されてしまう点では危ないかと思います。 もし、入力履歴データを見れるだけのリストを出す方法(データは選べない)方法があれば教えていただけないでしょうか。。。?せっかくご回答くださっているのに新たに希望を出してしまい、本当に申し訳なく思います。またお時間あるときでよいですので、よろしくお願い致します。 今回教えてくださった方法も素晴らしいので、別のデータ処理の際には是非使わせていただこうと思います。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

No2です。 No3様の回答は各列を記録用に利用する方式になっていますので、現状は、記録を残したいセルが1箇所/列みたいになっています。 (Sheet2の記録の内容を見てみればわかるはず) A1:E100みたいに、ある範囲のセル全部にこの機能を付加したい場合は、記録の方法を(No2にも書きましたように)1セル内にまとめてしまうか、あるいは記録保存の個数を制限しておいて(例えば100個)、1行目の記録はSheet2の1~100行に、2行目の記録は101~200行に記録しておく、みたいになるように修正してあげればよいでしょう。(列側で同様の処理でも同じですが) もともとの情報が不足なので、方法的なサンプルとしてご提示なさったものだと思われます。 あえて言うなら、Sheet_Changeのイベントが良いのかSaveのイベントが良いのかの疑問くらいか。 Sheet_Changeだと、誤入力でリターンキーを押したり、セルを移動したりすると、それも記録に残ってしまう。その一方で入力が即座に反映されるというメリットもある。

tama_1003
質問者

お礼

もとの情報をもっと詳しく書くべきでした・・・たくさんアドバイスをしてくださっているのに申し訳ないです。 今からでは遅いかもしれませんが・・・      A列  B列 C列 D列 E列 1行目 品名  卸1 卸2 卸3 卸4 2行目 …   価格 価格 価格 価格 3行目 … といった感じで1つの品に関して、各卸の価格を入力します。そして、卸価格の変動があるのでその履歴を残したいのです。 そして、わがままですが、各品毎に、条件付き書式で最小値を表示できるようにしたいです。 ここまでするのは無理でしょうか・・・ 素人で勉強不足のため、なかなか理解が遅いのですが、もし方法があれば教えてください。よろしくお願いします。

  • hige_082
  • ベストアンサー率50% (379/747)
回答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 後はご自由に

tama_1003
質問者

お礼

本当にありがとうございます!!ドロップダウンリストのように▼が出て入力履歴を見られる上に、条件付き書式(最小値を出すため)も使えて、したかったことが全て出来ました。すごいですね!!! これを、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の数値が履歴として表示されてしまい、うまくいきませんでした。 本当にお手数をお掛けして申し訳ないのですが、範囲を広げる方法を教えていただけないでしょうか? よろしくお願い致します。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

時間がないのでアイデアのみ ・非表示のシートを記録用に用意しておいて、ブックの保存時に自動で  マクロを走らせる。 ・マクロ側では、価格の部分を記録の最新版と比較し、更新されていた  らその部分を記録に追加する ・履歴を表示するのは、そのシートからデータを読めばよい ・記録は、1セルにカンマなどで繋げて保管しても良いし、レイアウトにも  よるけど1行(あるいは1列)を利用するような方式でも可 ってなところでどうでしょうか?

tama_1003
質問者

お礼

アドバイスをありがとうございます。 早速やってみますね!!

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

「ツール」「ブックの共有」すれば履歴が作成できます。 詳細は下記のURLを参照してください。 http://www.nurs.or.jp/~ppoy/access/excel/xlET017.html

tama_1003
質問者

お礼

早々のご回答をありがとうございます。 さっそく試してみました!! すると、1つ前の履歴は見ることが出来るのですが、それ以前のものは消えていってしまいました・・・。もし、全ての履歴を残せる方法があれば教えてください。 再度の質問になりますが、よろしくお願い致します。

関連するQ&A

  • エクセルで、数値を入力すると、計算された数値を同じセルに表示させる方法

     エクセルで、或る一つのセルに数値を入力すると、計算された数値が同じセルに表示されるようにしたいです。  具体的に、毎月の水道使用量を表にしたいのですが、水道代徴集が2ヶ月毎なので、水道使用量は明細の数値の半分なので、使用量を入力すると2で割った数値を同じセルに表示させたいのです。  いろいろ調べて、VBAを使うとできそうな感じですが、難しくてよくわかりません。  どうか、教えてください。お願いします。

  • エクセル 数値を全て「1」にする方法。

    エクセルの表で色々な数値が入力されているのですが、 その数値をすべて「1」に変えたいです。(一度に) 具体的に言いますと、 縦列に「商品名(20品目)」、横列に「取引先(300件)」の名前があります。 商品名ごとに100とか150とかの購入数が入っているのですが、 それらを全て「1」にしたいと思います。 取引先によっては購入数がないところもありますので、 空白のところはそのまま空白でいいです。 関数とかよく分かっていないのですが、よろしくお願いいたします。

  • セルに入力した数値をもとに参照するセルを決めるには

    数式で、セルに入力された数値をもとに参照するセルを決定する方法が知りたいです。 セルに入力された数値をもとに参照するセルを決定したり Sheet1のセルA1に「300」と入力したら、 Sheet2のA列から「300」を検出し、C4の位置にある「バナナ」を Sheet1のセルB2に反映させるにはどうしたらよいでしょうか? イメージ画像添付しました。 Sheet2のA列は順不同で、並び替えることができません。 エクセル2010を使用しています。 どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします

  • エクセルのセル入力に関して

    初めて投稿させて頂きます。 ご回答していただける方、よろしくお願いいたします。 エクセルのセルに数値を入力し、一度確定した後に もう一度同じセルに数値を入力した場合に 前回の数値を引き継いで加算を行うことは可能ですか? 例: セルA1に、数値5を入力。 その後、セルA1に7を入力し確定すると12と表示する方法 ご存知の方がいらっしゃいましたらご教授願います。

  • Excelで、「+○,○○○」という表示を、数値として表示させるには?

    Excelで、「+○,○○○」という表示を、数値として表示させるには? 私の質問の書き方が悪かったので、改めて質問をさせて頂きます。 前回、お答えくださった方々には、この場を借りてお詫び申し上げます。 さて、本題ですが、 Sheet1のA1セルに、 Sheet2のA1セルに手入力した、「数字の前に + あるいは - が付く数値」を、桁区切りのカンマ付きで表示させています。 + を表示させるために、参照元のセルの書式を「文字列」にしています。 参照先のSheet1のA1セルの隣のA2セルに入っている数値を、 Sheet1のA1セルが -○,○○○ の場合には赤字で、 Sheet1のA1セルが +○,○○○ の場合には黒字で表示させたくて、条件付き書式で [=$A$1<0]という数式を入れてみたものの、 参照元が「文字列」なので、どうやら参照先も文字列と判断されてしまうらしく、条件付き書式が機能してくれません。(参照元を「標準」等に直せば機能します) +○,○○○という表示を、数値として表示させることができれば、解決すると思うのですが、他に方法があればそれにはこだわりません。 なにか良い案はないでしょうか? お知恵を拝借させてください。

  • 隣のセルの数値または色を参照してその数値に枝番

    どなたか教えて頂きたく 隣のセルの数値を参照して、隣のセルに入力されている数値に枝番号を 自動的に付ける方法です 具体的には     A     B    1  400   400-1 2  400   400-2 3  200   200-1 4  200   200-2 5  300   300-1 6  400   400-3 7  200   200-3 8  400   400-4 9  100   100-1 B欄を自動入力する方法はありますか? A欄は手入力です 宜しくお願い致します 以上  

  • excelで入力されてる一番下のセルだけを消したい

    エクセルでいちばん下に入力されているセル(最新のセル)を ラクに消す方法はないでしょうか? 現在はファイルを開いた状態で ctrl+↓で最新のセルまで行って削除→ctrl+↑で戻ってくる という方法で作業しています これをマクロやVBAを使って簡略化することは可能でしょうか? ※ファイルごとに入力されてる数が違うので毎回セル数は違う数 ご回答、よろしくお願いいたします。

  • セルの数値からリスト内の商品名を表示

    条件 数値1~10にはそれぞれ商品名が設定されています。 C1~C10にはそれぞれの数値とリンクした商品名が記入してあります。 A1~A10に1~10の数値を入力します。 B1~B10に入力された数値に設定された商品名を表示したいです。 商品名が割り当てられていない数値を入力したときはエラー表示をしたいです。 リストとして C1 C2 1  メロン 2  すいか 3  バナナ   ・   ・ 10 トマト を設定します。 A1のセルに「2」を入力するとB1のセルに「すいか」 A2のセルに「1」を入力するとB2のセルに「メロン」 A3のセルに「11」を入力したときは「---」(エラー表示) と表示する計算式を教えてください。 よろしくお願いします。

  • VBA セルに入力されている数値でセルを指定する

    Excel VBA初心者です。 Sheet1のA1セルに10、A2セルに3を入力しています。 この入力したセルの数値を参照して、 Sheet2の「Cells(10,3)」(C10セル)を青(Interior.ColorIndex = 5)に 書式変更したいのですが、「Cells(”Sheet1.A1の値”,”Sheet1.A2の値”)」の 書き方がわかりません。 Excel2010を使用しています。 よろしくお願いします。

  • EXCEL セル内の特定の数値のみを抽出したい (関数だけで)

    セル内に数値・文字列を両方含む列があります。 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO 21213 ABC 42321243 KAKIKUKEKO 32480 CBAAA 59343124 SA 85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ここから「数値(2)のみ」を関数で抽出したいのですが、どのようにすればよいのでしょうか? ご教授よろしくお願いいたします!!

専門家に質問してみよう