Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9020 / 13644 ツリー ←次へ | 前へ→

【29696】単一のセルの値が更新された時 川崎 05/10/12(水) 3:57 質問[未読]
【29708】Re:単一のセルの値が更新された時 MARBIN 05/10/12(水) 10:15 回答[未読]
【29735】Re:単一のセルの値が更新された時 kobasan 05/10/12(水) 20:46 発言[未読]
【29739】Re:単一のセルの値が更新された時 川崎 05/10/12(水) 21:37 質問[未読]
【29741】Re:単一のセルの値が更新された時 りん 05/10/12(水) 21:56 回答[未読]
【29745】Re:単一のセルの値が更新された時 kobasan 05/10/12(水) 22:14 発言[未読]
【29746】Re:単一のセルの値が更新された時 川崎 05/10/12(水) 22:28 お礼[未読]

【29696】単一のセルの値が更新された時
質問  川崎  - 05/10/12(水) 3:57 -

引用なし
パスワード
   単一のセルの値が更新された時に更新前の値を記憶
しておいて更新後の値から更新前の値を引いた差分を
求めたいのですが、これを実行する
具体的なコーディングの仕方を教えてください。
ヒントになるキーワードでも結構です。
よろしくお願いします。

【29708】Re:単一のセルの値が更新された時
回答  MARBIN  - 05/10/12(水) 10:15 -

引用なし
パスワード
   InputBoxで入力させ、入力した値と元の値との
差分をMsgBoxなどで表示、ではいかがでしょう?

【29735】Re:単一のセルの値が更新された時
発言  kobasan  - 05/10/12(水) 20:46 -

引用なし
パスワード
   今晩は。
ちょっと作ってみました。
シートモジュールに貼り付けて試してみてください。

Option Explicit

Private orgV
Private orgAd As String

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If IsNumeric(Target.Text) = True And orgAd <> "" Then
    Application.EnableEvents = False
    Range(orgAd).Value = Target.Value - orgV
    Application.EnableEvents = True
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If IsNumeric(Target.Text) = True Then
    orgV = Target.Value
    orgAd = Target.Address(0, 0)
  Else
    orgV = 0
  End If
End Sub

【29739】Re:単一のセルの値が更新された時
質問  川崎  - 05/10/12(水) 21:37 -

引用なし
パスワード
   回答をくださったみなさん、大変ありがとうございます。
基本的にはJakaさんのやり方で私の願いはかなうようです。
ただTarget.Value + savのところはTarget.Value + sav
ではなくsav - Target.Value と変えたら
差分が求められました。
しかし、困ったことがまた発生しました。
この書き方だと2回目以降からは入力数ひく差分になってしまうので
私が求めたい数にならいことに気がつきました。
毎回、入力数-前回入力数 = 差分を求めるにはどうしたらいいのでしょうか?
例Jakaさんが書いてくれたコード
1000を入力次に1500を入力すると500が求められる、2回目からは
求めた500から次に入力した2000を入力するt1500という数字がでる。
こうではなくて私がやりたいのは、
1000を入力次に1500を入力すると500が求められる。2回目に
2000と入力した場合、2000-1500=500 と求めたい。
入力した数から前回の数の差分を毎回取得したいのです。
なおkobasanさんの書いてくださったコードは当方知識不足のため
貼り付けてためしてみましたが貼り付ける場所がわるいのか
動作しませんでした。実行方法を教えてもらえると幸いです。
ではよろしくお願いします。

【29741】Re:単一のセルの値が更新された時
回答  りん E-MAIL  - 05/10/12(水) 21:56 -

引用なし
パスワード
    川崎 さん、こんばんわ。

>単一のセルの値が更新された時に更新前の値を記憶
>しておいて更新後の値から更新前の値を引いた差分を
>求めたいのですが、
基本的にはJakaさんと同じ内容です。

Dim Dt1 As Double, Dt2 As Double 'グローバルで宣言(ずっと保持するため)
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(False, False) = "A1" Then
    Dt2 = Target.Value '入力された値
    If Dt1 > 0 Then
      With Application
        .EnableEvents = False
        Target.Value = Dt2 - Dt1
        .EnableEvents = True
      End With
    End If
    '
    Dt1 = Dt2
  End If
End Sub

グローバル変数は今一つ信用できないので(どのタイミングかで値が失われることがある)、変数に入れずにどこかのセルに入れておくほうが確実かもしれません。

【29745】Re:単一のセルの値が更新された時
発言  kobasan  - 05/10/12(水) 22:14 -

引用なし
パスワード
   ▼川崎 さん 今晩は。

>なおkobasanさんの書いてくださったコードは当方知識不足のため
>貼り付けてためしてみましたが貼り付ける場所がわるいのか
>動作しませんでした。実行方法を教えてもらえると幸いです。
>ではよろしくお願いします。

Sheet1で使いたいのなら、Sheet1モジュールに貼り付けて使うといいです。

念のため、新規にBook1を作成してください。
VBEを起動して、Sheet1(Sheet1)と書いてあるシートモジュールをダブルクリックしてください。
Sheet1モジュールの編集画面になりますから、ここに貼り付けてしてください。
VBEを終了してください。

Sheet1に値を入れて試してみてください。
これで確認できます。

以上です。

【29746】Re:単一のセルの値が更新された時
お礼  川崎  - 05/10/12(水) 22:28 -

引用なし
パスワード
   みなさんのおかげで何とか解決しました♪
ご協力感謝します。ありがとうございました♪
またなにかございましたらよろしくお願いします♪♪♪

9020 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free