• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ セルの値が変わった時、自動でマクロを実行させたいです)

エクセルマクロでセルの値が変わった時に自動でマクロを実行させたい

このQ&Aのポイント
  • エクセルマクロを使用して、セルの値が変わった時に自動でマクロを実行させたいです。現在のコードではボタンを押す必要がありますが、自動で配置し、古い画像を削除して新しい画像を配置するようにしたいです。
  • 現在は、「画像を表示」ボタンと「リセット」ボタンを使用して画像の表示と削除を行っていますが、これを自動化したいと考えています。具体的には、A1〜D3のセルが変わった時点で画像を表示し、古い画像を削除して新しい画像を配置するようにしたいです。
  • Worksheet_Calculate(またはChange)を使用して自動化を試みましたが、うまくいきませんでした。もし解決策がありましたら教えてください。お時間がある時にお願いします。

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

  • ベストアンサー
  • sumer45
  • ベストアンサー率17% (52/294)
回答No.4

無限ループとはループ処理(繰り返し処理)を行う際 出口が無い状態で永遠にここから抜け出せない状態を言います これはコードのミスの場合が多いですね これに入ってしまった場合はEscキーで抜けることができます 今回あなたが提示したコードでは For Each~のループ処理がありますが ループする範囲が明確に決まっていますので 無限にはなりません  他のプログラムを呼び出して実行するような プログラム構造にする有利な点は 見やすくなるのと エラーを起きたときの修正がわかりやすくなる、 (機械製品なんかでも悪い箇所のユニットを交換する対応がありますよね) プロシージャ(コードの一単位)を使いまわしできる などのメリットがあります  要するにメンテナンスがしやすくなるのです ただ、この場合注意すべき点があります 変数などに格納した値が他のプロシージャに移ったときに反映されない問題です これを回避するには  変数の有効範囲を広げる(Public変数など)、サブルーチンに値を引数で渡す などがあります このあたりは本を読んだほうがいいですね 個人的にお勧めする本は 大村あつし氏のかんたんプログラミングExcelVBAですね これは基本、応用、コントロールの3冊ありますが 3冊とも買ったほうがいいですよ 本気で覚えたいと思うなら必須かと・・ まぁ ワタシもまだまだ知ったかぶりの初心者の域です

yooko0108
質問者

お礼

ご回答ありがとうございます。 >ループする範囲が明確に決まっていますので >無限にはなりません これだけでも教えていただけて本当に助かりました。 やみくもにループについて調べていたので…。 また、ご親切にお勧めの本まで教えていただき、大変うれしいです。 早速、3冊まとめて注文しました。 今まで何度か覚えようとしてその度に挫折していました。 ですが、今回はちょっとがんばってみます。 sumer45様、 色々と大事なことを教えていただき、とても助かりました。 どうもありがとうございました。

その他の回答 (3)

  • sumer45
  • ベストアンサー率17% (52/294)
回答No.3

追伸: もともと、コマンドボタンで動作してるのだから 希望するイベントのときにそれを呼び出せばいいだけの事 ちなみに Call は省略しても動作するが 呼び出していることがわかりやすいので入れておいたほうがいいと思う (個人の好み)

yooko0108
質問者

補足

sumer45様 ご回答ありがとうございます。 >もともと、コマンドボタンで動作してるのだから >希望するイベントのときにそれを呼び出せばいい なるほど、こんなことは思いつきもしませんでした。すごいです。 教えていただいた通りやってみて、はじめはうまくいかないな、と困っていたのですが たまたま100枚ぐらいの画像を配置するように設定してテストしていたところ 重かったためか、一瞬だーっと画像が配置されているのが見えました(そして消えました)。 これが「無限ループ」というものなのでしょうか。。 どこかで止める方法を読んだことがある気がするので、自分なりに調べてみたいと思います。 ここまで教えていただいてとても助かりました。 どうしても解決できないようでしたら、もう一度お尋ねすることがあるかもしれません。 その時はまた教えていただけたらうれしいです。 取り急ぎお礼申し上げます。

  • sumer45
  • ベストアンサー率17% (52/294)
回答No.2

元のコードは標準モジュールにおき、 Private Sub・・ を Sub・・・ にする でもって 提示したコードは対象となるシートのイベントなので そのシートモジュールに置く

  • sumer45
  • ベストアンサー率17% (52/294)
回答No.1

Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("希望セル範囲")) Is Nothing Then Exit Sub Cancel = True Call photo_1 Call photo_2 End If End Sub こういう事?

yooko0108
質問者

補足

早速のご回答ありがとうございます。 分かりにくい説明でしたが、添付した「説明画像」は現在の状況で、 ・「画像を表示」ボタン(←これを押さないと画像が表示されない) ・「リセット」ボタン(←画像を削除するボタン) 上の2つのボタンなしで、グレーの部分(【Sheet2】のA1~D3)の更新に合わせて画像を自動表示させたいのです。 説明不足ですみません。 教えていただいたコードを書き足してみましたがうまくいきませんでした(知識不足が原因かもしれません)。 何かお気づきの点がありましたら教えていただけると助かります

関連するQ&A

専門家に質問してみよう