• ベストアンサー

EXCEL VBA (変更セル値の値をとる)

「A1セルからJ1セル」にランダムに数字が入っていたとします。 A1セルからH1セルのどこかの数字を変更した場合、その数字が変更したセルからJ1セルまで同じ数字になるようにしたいです。 たとえば、A1からJ1セルに1~10の数字をいれ、B1セル値の2を5に変更した場合、B1セルからJ1セルまでの値が全て5になるようにしたいです。 これはVBAで可能ですか? すいませんが宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.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

akahirekun
質問者

お礼

ありがとうございました。大変助かりました。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 シート モジュール に 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 でいかがでしょうか?

akahirekun
質問者

お礼

ありがとうこざいました。こんなことがEXCELで可能なんですね。 びっくりしました。 すいませんができましたら、補足でもうひとつ質問をお願いします。 今回の教えていただいたのは1行目だけなのですが、複数の行で同じ現象ができるようにすることは可能ですか たとえば 上記の現状が1行目から10行目まで可能とした場合 A6セルに入力した場合 → A6~J6まで同じ値になる C2セルに入力した場合 → C2~J2まで同じ値になる このような事は可能でしょうか? お願いします。

関連するQ&A

専門家に質問してみよう