- 締切済み
エクセル マクロでこんな事が出来ますでしょうか?
エクセル マクロで以下の内容の事が出来ますでしょうか? よろしくお願いします。 A列のセルに対応する数値が変更された場合、 その増減分を変更があった(箇所-4)までのセルも 増減分の数値に変更される。 何かボタンを押してではなく、数値が変更されたら、以下のように 他のセルも増減分変更される。 例 A1=10 A2=10 A3=10 A4=10 A5=10 A6=10 A7=10 A8=10 A9=10 A10=10 例(1) 1、A5=10 の数値 10→15に変更。 2、A5=15 の数値が変更されたのを受けて A4=15 A3=15 A2=15 A1=15 も増減分 変更される 例(2) 1、A3=10 の数値 10→15に変更。 2、A3=15 の数値が変更されたのを受けて A2=15 A2=15 A1=15 も増減分 変更される 【注意】 A10に戻ることは無くA1まで変更される
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
できるでしょう。 ワークシートのチェンジイベントを利用すればよいでしょう。 同一セルを変更した場合、増減分を把握するのが面倒ですが、非表示の列を従前の値の保管場所として利用するなどの工夫をすれば、後は簡単です。
- igig
- ベストアンサー率15% (3/19)
Excelのバージョンが不明ですので、絶対とは言い切れませんが。 WorksheetオブジェクトにおいてChangeイベントはセルの値が変更された場合に実行されます。 ボタン等は必要ありませんが、ワークシート内のすべてのセルが対象となりますので、セルを判別してプログラムで切り分ける必要があります。
補足
お礼が遅くなりまして申し訳ございません。 回答有難うございました。 回答頂き、いろいろと調べましたが、 A列のセルに対応する数値が変更された場合、 その増減分を変更があった(箇所-4)までのセルも 増減分の数値に変更される箇所が分かりませんでした。 よろしくお願いします。以下が現在の状況です。 Private LastTarget As Variant Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("A1:A10"), Target) Is Nothing Then If Target.Value <> LastTarget Then h = Target.Value - LastTarget m = IIf(h < 0, " 減少", " 増加") MsgBox Abs(h) & m & "しました。" End If End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) LastTarget = Target.Value End Sub
補足
お礼が遅くなりまして申し訳ございません。 回答有難うございました。 回答頂き、いろいろと調べましたが、 A列のセルに対応する数値が変更された場合、 その増減分を変更があった(箇所-4)までのセルも 増減分の数値に変更される箇所が分かりませんでした。 よろしくお願いします。以下が現在の状況です。 Private LastTarget As Variant Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("A1:A10"), Target) Is Nothing Then If Target.Value <> LastTarget Then h = Target.Value - LastTarget m = IIf(h < 0, " 減少", " 増加") MsgBox Abs(h) & m & "しました。" End If End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) LastTarget = Target.Value End Sub