- ベストアンサー
エクセルで入力時間を更新させずに表示させたい
エクセル初心者です。シート内で複数の入力時間を、更新させずに表示させたいのですが、どのようにすればよいのでしょうか? A1にある数値を入力したらB1にその入力時間を表示させ、一定時間後にA2に別の数値を入力すると、B2にその入力時間を表示させたいです。 B1、B2の入力時間とは、あくまでもそれぞれの入力した時の時間を表示させたく、また、表示後は時間の更新はさせたくないです。 ”=NOW()”だと、入力のたびに過去の表示時間まで同時に更新されてしまい、また、複数の表示時間が全て同じ時間となってしまいます。 簡単な関数などでできれば助かりますが、マクロやVBAでないとできないというのであればやってみたいと思いますので、できる方法で教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
普通の操作は、時刻の入力は、CTRLを押しつつ:キーを押します。 ーー VBAの勉強してない人には進められませんが、 シートタブを右クリック コードの表示 Generalと見えているところをクリク Worksheetを選ぶ Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub と出てくるが無視 SelectionChangeと出ている部分をクリック Changeをクリック Private Sub Worksheet_Change(ByVal Target As Range) End Sub となる。 この間にコードを入力する。 Targetが、セルの値を変化させたセルなので その隣のセル Offset(0,1) に時刻を入れるのは Target.offset(0,1)=Time =dateにして書式で時刻だけ見せるほうが、入力日も残って、良いかもしれない。 ただしVBAででも隣に時刻を入れるとセルの値の変化イベントが起こり、ぐるぐる回りになるから、その機能を1時的に止めて、隣のセルに時刻をセットし、イベント機能を復活させる。 また、例えばA1:A30のセル以外は、自動時刻セットが困るので 例えば、A列以外のセルは除外のコードを入れる。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 1 Then Exit Sub If Target.Row >= 31 Then Exit Sub Application.EnableEvents = False Target.Offset(0, 1) = Time Application.EnableEvents = True End Sub 細かく言えば、A列を入力後、DELで消したときの対策など必要だが 省略。 ーー こんなにいっぱいVBAの色々なことが詰まっている内容を今すぐやろうというのはむりだよ。 まあ丸呑みしてこのキッカケでVBAを勉強してください。
その他の回答 (1)
- hallo-2007
- ベストアンサー率41% (888/2115)
関数では、無理です。 ひとつ手間ですが、B1セルで、Ctrl+*で時間を入れます。 VBAでは、「ツール」「マクロ」「VB Editor]でエディター開く 「表示」「プロジェクトエクスプローラー」表示 時刻を入れるシートをクリック そのシートのコードに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Target.Offset(0, 1).Value = Time End If End Sub のコード、コピィしてみてください。 Private Sub Worksheet_Change(ByVal Target As Range)は その、シートに変更があった場合に実行される。 Target.Column = 1は、変更されたのが、1列目(A列だったら) Offset(0, 1)は、1列左に時間を入れるという意味です。 VBAは別途、勉強してみてください。
お礼
早速ご回答ありがとうございました。やはり関数では無理なんですね。 Ctrl+*で時間を入れるというのは、とりあえず手っ取り早く入力するには使える機能ですね。知りませんでした。 VBAでのコードも試してみて、希望通りの表示ができました。VBA自体の使い方がまだよく分かっていないので、コードを実行させても魔法を見ている感じですが、これを機会に勉強してみます。
お礼
丁寧なご回答ありがとうございました。 コードを試してみて、希望通りの表示ができました。 VBAにはじめて触れましたが、VBAの面白さの一端を感じました。これをきっかけに、上記のコードの説明を読み返しながら勉強してみたいと思います。