• ベストアンサー

IF関数を使ってマクロを実行させるには?

Excel2002のユーザーです。 実行させたいマクロを Macro1、Macro2 とします。 セルA1の値を参照して実行させたいマクロを選択するために =IF(A1=1,Macro1(),Macro2()) というようなことをやってみたのですがうまくいきません。 このようにIF関数を使ってマクロを実行させるにはどのような記述をすればよいのでしょうか。 凄く簡単なことかもしれませんが、ご教授をよろしくお願い致します。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.5

その形ではマクロは実行できません。 出来ても簡単ではありませんし、幾つも制限があります。 Sub a() ~~ End Sub Sub b() ~~ End Sub Function cx(c) If c = 1 Then Call a cx = "A" Else Call b cx = "B" End If End Function のように、自作関数 CX() を作って、セルに「=CX(A1)」のように記入すれば、実行できます。 ただし、どのマクロからも、他のセルに値を記入する事はできませんので、Function cx(c) ではなく、sub cx() として作成して、ボタンを作って実行させるのが良いとおもいます。

macro_de_comatta
質問者

お礼

ご回答ありがとうございます。 教えていただいた例を参考に組んでみましたら 希望通りの結果を出せました。 自作関数という手があったのですね。勉強になりました。

その他の回答 (4)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

他のマクロを Private にしておいて、Start を実行するとか、、、 Sub Start()  If ActiveSheet.Range("A1").Value = 1 Then    Call Macro1  Else    Call Macro2  End If End Sub Private Sub Macro1()   MsgBox "Macro1" End Sub Private Sub Macro2()   MsgBox "Macro2" End Sub それともセルの値が変わった時に実行させたいのかな?

macro_de_comatta
質問者

お礼

ご回答ありがとうございます。 そうです。セルA1の値が変わって、初めてマクロを実行させたいのです。 質問の内容が分かりづらくてすみません。

  • alarm_set
  • ベストアンサー率19% (6/31)
回答No.3

「ツール」>「マクロ」>「Visual Basic Editor」を開いて、以下のようにひとつのマクロにまとめてはどうでしょうか? Sub test()   If Range("A1").Value = 1 Then     Range("B1").Value = 1  ・・・A1が1のときに行いたい処理   Else     Range("b1").Value = 0  ・・・A1が1以外のときに行いたい処理   End If End Sub

macro_de_comatta
質問者

お礼

すばやいご回答ありがとうございます。 No4.の返答通り、質問が分かりづらくてすみません。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.2

定義してあるマクロをFunctionで定義しなおしたらどうでしょう? (自信全くなし m(_ _)m)

macro_de_comatta
質問者

お礼

すばやいご回答ありがとうございます。 No4の返答通り、質問が分かりづらくてすみません。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.1

それは、マクロの方で条件判断してやればいいだけの話では? procedure @@@() if sheet1.range("a1").value<>1 then exit else ... ... ... end if end みたいな感じで。

macro_de_comatta
質問者

お礼

すばやいご回答ありがとうございます。 No4の返答通り、質問が分かりづらくてすみません。