• ベストアンサー

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

表題の質問をさせていただきます。よろしくお願いいたします。 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さんの方法を実装させていただこうと思いますが、今後ともご教授よろしくお願いいたします。 本当にありがとうございました。

関連するQ&A

  • セルの値が変ると自動でマクロが実行される。

    セルの値が変ると自動でマクロが実行されるVBAを教えて下さいm(_ _ )m 例えば、シート1のA1の値が変ると、マクロAが実行される。 シート1のA2の値が変ると、マクロBが実行される。 と一つのシート内に複数のイベントを設置したのですが、イマイチわかりません。 知恵をお貸し下さい。

  • Excel マクロの登録 を一定間隔で実行する

    【マクロの登録】で登録したマクロを1分おきに自動で実行させるには、どうすればよいでしょうか? セルA1の値が変化した時に、登録したマクロが実行する方法もあれば教えてください。 宜しくお願いします。

  • セルの値によって、どちらのマクロを実行するか分岐?

    ■もしも A1セルの値が 「課長」「部長」という文字列を含んでいる場合は、    ”マクロA” を実行する。 ■そうではなく、 A1セルに、 「社長」「社員」という文字列があったなrば、 ”マクロBを実行する”  ・・・というマクロを作りたいのですが、教えていただけませんでしょうか。  どうぞ、よろしくお願いいたします。  

  • エクセルでセルの値が変更されたらマクロを実行

    エクセルで、セルの値が変更されたらマクロを実行したいと考えています。 具体的には、A1のセルに何か値が入力されるか、変更されたら、 作成したマクロを実行したいと考えています。 どうしたらいいのでしょうか。 ご教授ください。 よろしくお願いします。

  • セルの値によって実行するマクロを選択する

    マクロ1~3をすで作成してあります。 そこで 例えばsheet1のA1の値が 1~7の時---マクロ1を実行 8~14の時--マクロ1とマクロ2を実行 15~21の時---マクロ1、マクロ2およびマクロ3を実行 それ以外の値の時--メッセージ”やり直し”を表示 のようなマクロを作りたいのですが よろしくおねがいします

  • EXCELで”+100"を実行するマクロ

    EXCELで、マクロを実行するたびに、そのセルに入っている数に100プラスされるマクロを作りたいのです。 意味がよく分からないかもしれませんが、 例えば、あるセルに"100"という数値が入っていて、 1回実行すれば100+100で"200"に、もう1度実行すると、200+100で"300"に。…という感じです。 私的に考えたのは、 別のセルに"そのセル+100"をする式を書き込み、 コピー&元のセルに値貼り付けをし、 式の入った別のセルをDELする… というのをマクロにしてみたのですが、 イマイチうまくないというか… よい方法があったら、アドバイスください。

  • 【EXCEL】あるセルにAという値が入力されたら既定範囲にマクロを自動実行したい

    「あるセルにAという値が入力されると,既定範囲にマクロを自動実行する」ということはできますか? たとえばB2に「欠席」という値が入ったらその下のB3~B8までセルを斜線にする.     C3に「欠席」という値が入ったらその下のC3~C8までセルを斜線にする. という感じです.マクロサイトもいくつかみたのですが分かりません.お願いします.

  • マクロが実行されるセル範囲の変更を簡素化したい

    excel 2016を使っています。 例えば、ボタンを押すと指定したセルA1~A10までに入力されている数値を昇順に並べ替えるマクロがあるとします。 この数値が入力されているセルA1~A10の範囲をドラックして、D1~D10の位置に移動すると、マクロが実行される範囲を新たにD1~D10に指定しないとならないのですが、マクロが実行される範囲をA1~A10の範囲に固定して、別の場所に移動してもマクロを修正しなくても良い方法はありますか。

  • セルの値変更でマクロ実行

    セルに値を入力すると、他のシートで演算され結果がセル"A1"にTRUE、FALSEと表示される関数式ができています。 セル"A1"の変化によりマクロ実行させたいと思います。プログラムの案をお願いします。

  • マクロ 実行ボタンを押さずに常に実行

    マクロを常に実行することはできますか? 「常に実行」という表現が適切か分からないのですが、 例えば・・・・・・ A1~A10まで数値を入力する表があり、それをD1~D10にコピー・貼り付けを行う[貼り付け]マクロがあります。 Sub 貼り付け() ' 貼り付け Macro Range("A1:A10").Copy Range("D1") End Sub これを、[貼り付け]マクロの実行ボタンを押して実行するのではなく、 A1~A10に数値を入力する毎に[貼り付け]マクロ実行される(D列に数値が入る)事は可能でしょうか? よろしくお願いします。

専門家に質問してみよう