- ベストアンサー
値によって違うマクロの実行
表題の質問をさせていただきます。よろしくお願いいたします。 A1セルには、別シートで計算された値が転記されるようになっており、1から45までのいずれかの数値が入っています。 その数値によって異なる動きをするマクロが3個あります。 1から15の時はマクロA 16から30の時はマクロB 31から45の時はマクロC おのおののマクロはフォームのボタンから実行できるように登録してあります。 現在はA1セルの数値を見て該当するボタンを押してマクロを実行しています。 たとえばA1の値が「25」の時はマクロCが登録してあるボタンCを押しています。 そこで質問させていただきたいのは 既存のボタンを撤廃し 新たに設置するひとつのボタンで3個のマクロを制御したいと思ったのです。 新たなマクロでA1の値を取得し、そのマクロ内で既存のマクロへ割り振るためには どのような記述をすればよいのでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
割り振りの仕方だけ。 Sub test() Select Case Range("A1").Value Case 1 To 15 MsgBox "マクロA" Case 16 To 30 MsgBox "マクロB" Case 31 To 45 MsgBox "マクロC" Case Else End Select End Sub あとは各々でMsgBoxの代わりにマクロを呼び出しては?
その他の回答 (1)
- zap35
- ベストアンサー率44% (1383/3079)
例えばこんな例でも可能です。 シート上に配置した「フォームのコマンドボタン」にMacro1を割り当てて使用します。 Sub Macro1() Dim intWk As Integer If IsNumeric(Range("A1").Value) Then intWk = Int(Range("A1").Value) Select Case intWk Case Is < 0 MsgBox("数値の範囲は1~45です") Case Is < 16 Call MacroA Case Is < 31 Call MacroB Case Is < 46 Call MacroC Case Else MsgBox("数値の範囲は1~45です") End Select Else MsgBox("A1セルには数値を入力してください") End If End Sub Sub MacroA() End Sub Sub MacroB() End Sub Sub MacroC() End Sub
お礼
早々にご回答いただきありがとうございます。 MsgBoxでの説明を考えていなかったので その点も参考になりました。 当初 Application.Run "○○○.xls!MacroA" として既存のマクロを動かすことを試していたのですが Call MacroA で呼び出せるのですね。 いろいろと勉強になります。 今回はn-junさんの方法を実装させていただこうと思いますが、今後ともご教授よろしくお願いいたします。 本当にありがとうございました。
お礼
早々のご回答ありがとうございます。 早速試しまして無事に思い通りの動きができました。 画面内もボタンが減りとてもシンプルになりました。 今まではボタンを間違ってしまうこともあったのですが これからは心配なくなります。 ありがとうございました。