Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

エクセル VBAで

変動する数値が、セル A1に入る状況で、 該当シートに Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = 1 Then Range("C62").Value = "○" ElseIf Range("A1").Value = 2 Then Range("C62:C63").Value = "○" ElseIf Range("A1").Value = 3 Then Range("C62:C64").Value = "○" ElseIf Range("A1").Value = 4 Then Range("C62:C65").Value = "○" ElseIf Range("A1").Value = 5 Then Range("C62:C66").Value = "○" ElseIf Range("A1").Value = 6 Then Range("C62:C67").Value = "○" ElseIf Range("A1").Value = 7 Then Range("C62:C68").Value = "○" ElseIf Range("A1").Value = 8 Then Range("C62:C69").Value = "○" ElseIf Range("A1").Value = 9 Then Range("C62:C70").Value = "○" ElseIf Range("A1").Value = 10 Then Range("C62:C71").Value = "○" ElseIf Range("A1").Value = 11 Then Range("C62:C72").Value = "○" ElseIf Range("A1").Value = 12 Then Range("C62:C73").Value = "○" ElseIf Range("A1").Value = 13 Then Range("C62:C74").Value = "○" ElseIf Range("A1").Value = 14 Then Range("C62:C75").Value = "○" ElseIf Range("A1").Value = 15 Then Range("C62:C76").Value = "○" End If End Sub と言ったマクロを記述しましたが、 動作がどうにも重くて困っています。 一度、プレビューをした後は特に遅くなります。 何か良い解決方法はありますでしょうか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

#3です。 >A1に計算式(たとえば=B1+B2・・・ Å1に=B1+C1と式を入れて 下記をシートモジュールに入れて、B1c1を変えて見ましたが 反応しません。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "Changed" End If End Sub ーー Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Or Target.Address = "$C$1" Then MsgBox "Changed" End If End Sub にするともちろん反応します。 ーー A1の式によっては If Target.Address = "$B$1" Or Target.Address = "$C$1" Then の部分が煩雑になります。 ーー 続いたセルであれば(SUM関数などの範囲)Intersectという関数1本で捉えられる場合もあります。 C1:C10のどれかが変わった場合 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("C1:C10"), Target) Is Nothing Then MsgBox "Changed" End If End Sub

yabusoba-
質問者

お礼

回答ありがとうございます。 C1:C10のどれかが変わった場合の式で対応したところ、 当初より快適に動くようになりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

入力数字と円を入れるセル数は、規則性があるのだから、コード上は 簡単になる。 既出回答のResizeか Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("c6:C55").Clear Range("C6:C" & 5 + Target).Value = "○" End If End Sub この例はテストで見やすいように、C6以下にした。 62-->6に変えた。 上記Range("c6:C55").Clearの点については、必要かよく検討してください。 ーー ScreenUpdating=Falseを入れるなども考えてみてください。 これ(冗長なコード数)が原因とは思えないけれど参考に挙げてみます。

yabusoba-
質問者

お礼

回答ありがとうございます。 "変動する数値が、セル A1に入る状況"と言うのが説明不足でした。 A1に計算式(たとえば=B1+B2と言った式)が入った場合、B1やB2の数値が変わり、A1の数値が変わる度に、教えて頂いたマクロが起動するようにできるのでしょうか?

すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

ANo1さんの回答は、ご質問の内容通りなので、既に回答はでているのですが・・・ >変動する数値が、セル A1に入る状況で、~ イコライザーのようにリアルタイムに変動を表示したいのだとすると、ご質問のマクロだと、A1の値が減少したときには反映されません。 A1の値が増加しかしないのなら、問題ありませんが・・・ また、変化するのがA1セルだけなのか、他のセルも変化している(けれど表示には反映しないだけ)のかによっても処理を少し変えた方が良いかも。 (Changeイベントはどのセルが変わっても発生するので、A1セルが変化しなくても、同じ内容を上書き処理してしまう。=無駄な処理:重くなる原因) もし、↑の両方とも反映するなら、 Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$A$1") Then Range("C62:C76").ClearContents Range("C62").Resize(Range("A1").Value) = "○" End If End Sub のような感じになります。 さらに、A1に入る値が0以下やその他の可能性がある場合は、値のチェックも入れておいた方が良いでしょう。(でないと、エラーになって止まってしまう。)

yabusoba-
質問者

お礼

回答ありがとうございます。 "変動する数値が、セル A1に入る状況"と言うのが説明不足でした。 A1に計算式(たとえば=B1+B2と言った式)が入った場合、B1やB2の数値が変わり、A1の数値が変わる度に、教えて頂いたマクロが起動するようにできるのでしょうか?

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Private Sub Worksheet_Change(ByVal Target As Range) Range("C62").Resize(Range("A1").Value) = "○" End Sub こうゆう事では?

yabusoba-
質問者

お礼

回答ありがとうございます。 "変動する数値が、セル A1に入る状況"と言うのが説明不足でした。 A1に計算式(たとえば=B1+B2と言った式)が入った場合、B1やB2の数値が変わり、A1の数値が変わる度に、教えて頂いたマクロが起動するようにできるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A