- ベストアンサー
EXCEL VBA (変更セル値の値をとる)
「A1セルからJ1セル」にランダムに数字が入っていたとします。 A1セルからH1セルのどこかの数字を変更した場合、その数字が変更したセルからJ1セルまで同じ数字になるようにしたいです。 たとえば、A1からJ1セルに1~10の数字をいれ、B1セル値の2を5に変更した場合、B1セルからJ1セルまでの値が全て5になるようにしたいです。 これはVBAで可能ですか? すいませんが宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>今回の教えていただいたのは1行目だけなのですが、 >複数の行で同じ現象ができるようにすることは可能ですか 「シート モジュール」に「Private Sub Worksheet_Change」で始まるコードを記述しましたら、「Worksheet」が「Change」したとき、つまり、何かしらの変更が生じたときに、以下のコードが動き出します。これを チェンジ イベント と言います。 コードの中の「Target」というのが、その変化した範囲なのですが、実は、チェンジ イベント というのは、変化を察知してコードが動き出したときに、自分自身の命令で「Worksheet」を「Change」してしまうと、チェンジ イベント の繰り返しになってしまいますので、本来なら、コードの前後を Application.EnableEvents = False 'イベント 停止 Application.EnableEvents = True 'イベント 再開 で挟み込まなければなりません。 が、私が前回答で示したコードでは、 If Target.Count = 1 And Not Application.Intersect(Target, Range("A1:J1")) Is Nothing Then と書いておりますが、これは「変化した範囲が1セル」でなおかつ「変化した範囲と "A1:J1" に共通部分がある場合」のみに動くように設定しております。 #実は、「Range("A1:J1")」の部分に誤りがありまして、本当は「Range("A1:I1")」の方がよかったのですが、大したことでもなかったので、そのままにしておりました。 以上のことを踏まえて >たとえば 上記の現状が1行目から10行目まで可能とした場合 >A6セルに入力した場合 → A6~J6まで同じ値になる >C2セルに入力した場合 → C2~J2まで同じ値になる >このような事は可能でしょうか? 「変化する範囲」が1セル以上ある場合は、設定がややこしくなりますので、2セル以上が一度に変化したときには動かないようにしております。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And Not Application.Intersect(Target, Range("A1:I10")) Is Nothing Then Range(Target, Range("J" & Target.Row)).Value = Target.Value End If End Sub
その他の回答 (1)
- DOUGLAS_
- ベストアンサー率74% (397/534)
シート モジュール に Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And Not Application.Intersect(Target, Range("A1:J1")) Is Nothing Then Range(Target, Range("J1")).Value = Target.Value End If End Sub でいかがでしょうか?
お礼
ありがとうこざいました。こんなことがEXCELで可能なんですね。 びっくりしました。 すいませんができましたら、補足でもうひとつ質問をお願いします。 今回の教えていただいたのは1行目だけなのですが、複数の行で同じ現象ができるようにすることは可能ですか たとえば 上記の現状が1行目から10行目まで可能とした場合 A6セルに入力した場合 → A6~J6まで同じ値になる C2セルに入力した場合 → C2~J2まで同じ値になる このような事は可能でしょうか? お願いします。
お礼
ありがとうございました。大変助かりました。