[[20140828132452]] 『表に数値の増減が反映されるようにするには?』(あっぷ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『表に数値の増減が反映されるようにするには?』(あっぷ)

A、B、Cという事項に対し、それぞれX,Y,Zという数値があらかじめ与えられているとします。
(2×3の6個のセルから成る表(表1とします。)があるとします。)

別の表に、AからCまでをランダムに入れて行き、それぞれに対して適宜の数値を入れていくとします。この場合に、例えば『A 1000』と入れると、表1のAの数値が『X-1000』と反映され、次に『C 500』と入れると表1のCの数値が『Z-500』と反映され、次に『A 300』と入れると、表1のAの数値が『A-1000-300』と反映され、次に『B -700』と入れると、表1のBの数値が『B+700』と反映され、…というように繰り返されるような設定にしたいのですが、どうすればできるのでしょう?
ご教示願えれば幸いです。

< 使用 Excel:Excel2013、使用 OS:unknown >


 入力値を一度だけ処理するということは通常の式では困難なので、マクロの例です。

 いろいろと運用上の問題はありそうですが、とりあえずのサンプルです。
 A1:B3 が表だとして、D1 に入力、E1:H1 に確認のための処理結果を表示して
 処理後 D1はクリアしています。
 シートモジュール(シートタブで右クリックでコードの表示)においてください。

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$D$1" Then Exit Sub
    Dim calcCell As Range
    Select Case Left(Target.Value, 1)
        Case "A": Set calcCell = Range("B1")
        Case "B": Set calcCell = Range("B2")
        Case "C": Set calcCell = Range("B3")
        Case Else: Exit Sub
    End Select

    Application.EnableEvents = False
    Range("E1").Value = Target.Value
    Range("F1").Value = calcCell.Value
    Range("G1").Value = "⇒"
    calcCell.Value = calcCell.Value - CDbl(Trim(Mid(Target.Value, 2)))
    Target.ClearContents
    Range("H1").Value = calcCell.Value
    Application.EnableEvents = True
 End Sub

(Mook) 2014/08/28(木) 14:13


ありがとうございました!
(あっぷ) 2014/08/28(木) 20:46

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.