- ベストアンサー
エクセルにてセルへ数値を入力時、事前に入力していた値との差を別のセルに表示させたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
たとえばA20を作業セルとして利用するとして Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Cells(1, Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column + 1).Value = Range("A1").Value - Range("A20").Value Cells(1, Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column).Offset(1, 0).Value = Date Range("A20").Value = Range("A1").Value End If End Sub でいかがでしょう
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
関数で出来ると思って居るなら、エクセル関数の理解不十分です。 VBAそれもイベントプロシャーの考えがわかって無いと出来ません。VBAの経験ありますか。 この要求(仕組み)そのものが、エクセルではキワモノ的発想です。 エクセルでは入力するデータは別セルに順次入れるのが鉄則です。 初心者は特に。 私も#4さんと同じ考えです。 ーー VBAなら#2さんのコードの一部を Cells(1, Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column + 1).Value = Range("A1").Value - Range("A20").Value を差の考えによっては、ABS(絶対値)にするとか(質問者がマイナス順序を指定しているので#2のご回答が正しいのでしょう) Application.EnableEvents=False と Application.EnableEvents=True を最初と最後の次と前に入れます。 入れなくても、この質問の場合は、変化するのはA1セル以外なのでそのままでもよいのですが。
- cistronezk
- ベストアンサー率38% (120/309)
どうして、こういう要望が出るのか理解に苦しみます。 入力ミスがあったらどうするのか?たとえば「40」と入力すべきところを間違えて「41」と入力した場合にどうするのか? そもそも、比較元のデータがなければ入力ミスしたかどうかさえ確認できません。そのような不確実なデータにどれだけ意味があるのでしょう? 仕事としては、最低限、入力ミスしたかどうの確認ができる状態にしておくべきではないでしょうか。
- nyororo-n
- ベストアンサー率50% (1/2)
よくわかってないんだけど・・・、 少なくともVBAを使わないと処理できないと思うよ。 とりあえずこんな感じになるのかな? 表示は表示形式で設定する形で。 Dim 前数字 As Integer Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Integer x = 2 If Target.Column = 1 And Target.Row = 1 Then Do While Cells(1, x).Value <> "" x = x + 1 Loop Cells(1, x).Value = 前数字 - Cells(1, 1).Value Cells(2, x).Value = Date 前数字 = Cells(1, 1).Value End If End Sub
補足
回答ありがとうございますw コードの表示にコピーしてやってみたのですがA1に入力した数字に -が付いてB1…に表示されていきます。
- kmetu
- ベストアンサー率41% (562/1346)
A1の次にA2にデータをいれてその差をB2へ…以下そのまま下へと続いていく といった動作では駄目なんですか
補足
さっそく回答ありがとうございます! A1の下へは同じように入力する数値用のセルにしていきたいので、 A1へ入力したデータだけで動作させたいです。
お礼
思った通りに動作しました! とても助かりました。ありがとうございました。