• ベストアンサー

値によって違うマクロの実行

表題の質問をさせていただきます。よろしくお願いいたします。 A1セルには、別シートで計算された値が転記されるようになっており、1から45までのいずれかの数値が入っています。 その数値によって異なる動きをするマクロが3個あります。  1から15の時はマクロA  16から30の時はマクロB  31から45の時はマクロC おのおののマクロはフォームのボタンから実行できるように登録してあります。 現在はA1セルの数値を見て該当するボタンを押してマクロを実行しています。 たとえばA1の値が「25」の時はマクロCが登録してあるボタンCを押しています。 そこで質問させていただきたいのは 既存のボタンを撤廃し 新たに設置するひとつのボタンで3個のマクロを制御したいと思ったのです。 新たなマクロでA1の値を取得し、そのマクロ内で既存のマクロへ割り振るためには どのような記述をすればよいのでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

割り振りの仕方だけ。 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の代わりにマクロを呼び出しては?

Haku46
質問者

お礼

早々のご回答ありがとうございます。 早速試しまして無事に思い通りの動きができました。 画面内もボタンが減りとてもシンプルになりました。 今まではボタンを間違ってしまうこともあったのですが これからは心配なくなります。 ありがとうございました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

例えばこんな例でも可能です。 シート上に配置した「フォームのコマンドボタン」に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

Haku46
質問者

お礼

早々にご回答いただきありがとうございます。 MsgBoxでの説明を考えていなかったので その点も参考になりました。 当初 Application.Run "○○○.xls!MacroA" として既存のマクロを動かすことを試していたのですが Call MacroA で呼び出せるのですね。 いろいろと勉強になります。 今回はn-junさんの方法を実装させていただこうと思いますが、今後ともご教授よろしくお願いいたします。 本当にありがとうございました。