- ベストアンサー
IF関数を使ってマクロを実行させるには?
Excel2002のユーザーです。 実行させたいマクロを Macro1、Macro2 とします。 セルA1の値を参照して実行させたいマクロを選択するために =IF(A1=1,Macro1(),Macro2()) というようなことをやってみたのですがうまくいきません。 このようにIF関数を使ってマクロを実行させるにはどのような記述をすればよいのでしょうか。 凄く簡単なことかもしれませんが、ご教授をよろしくお願い致します。
- みんなの回答 (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() として作成して、ボタンを作って実行させるのが良いとおもいます。
その他の回答 (4)
- papayuka
- ベストアンサー率45% (1388/3066)
他のマクロを 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 それともセルの値が変わった時に実行させたいのかな?
お礼
ご回答ありがとうございます。 そうです。セルA1の値が変わって、初めてマクロを実行させたいのです。 質問の内容が分かりづらくてすみません。
- alarm_set
- ベストアンサー率19% (6/31)
「ツール」>「マクロ」>「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
お礼
すばやいご回答ありがとうございます。 No4.の返答通り、質問が分かりづらくてすみません。
- edomin
- ベストアンサー率32% (327/1003)
定義してあるマクロをFunctionで定義しなおしたらどうでしょう? (自信全くなし m(_ _)m)
お礼
すばやいご回答ありがとうございます。 No4の返答通り、質問が分かりづらくてすみません。
- coco1
- ベストアンサー率25% (323/1260)
それは、マクロの方で条件判断してやればいいだけの話では? procedure @@@() if sheet1.range("a1").value<>1 then exit else ... ... ... end if end みたいな感じで。
お礼
すばやいご回答ありがとうございます。 No4の返答通り、質問が分かりづらくてすみません。
お礼
ご回答ありがとうございます。 教えていただいた例を参考に組んでみましたら 希望通りの結果を出せました。 自作関数という手があったのですね。勉強になりました。