• ベストアンサー

エクセルのVBAのことで

コマンドボタンで「Macro1」というマクロを実行させるVBAは以下だと思いますが。 Private Sub CommandButton1_Click() Call Macro1 End Sub 上記に、Sheet1・Sheet2・Sheet3に対して実行するということを加えると、どんなふうになるでしょうか。

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

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

呼び出されたマクロ、Macro1の中に必要な処理を記述すればよいのです。 sub macro1 sheet1.activate ... sheet2.activate ... end sub ってな具合に。

wrgudl
質問者

お礼

ありがとうございます。 Sheet1・Sheet2・Sheet3それぞれにコマンドボタンを二つ貼り付けて、コマンドボタン1でMacro1を自シートのみに実行して、コマンドボタン2で3つのシートに対してMacro1を実行させるようにしたいのですが。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

>Sheet1・Sheet2・Sheet3それぞれにコマンドボタンを二つ貼り付けて、コマンドボタン1でMacro1を自シートのみに実行して、コマンドボタン2で3つのシートに対してMacro1を実行させるようにしたいのですが。--> これだけ補足頂いても、#1の方がおっしゃるように、何をMacro1でしたいかを具体的に示して頂かないと、 一般的な答えで済むタイプの質問ではないと思います。 一般にマクロはシートごとに登録されるのでなく、標準モジュールに作ったものは、ブック単位で保存され、(他ブックでも使えるようにと言う質問ならそれで質問として成り立ちますが)各シートに対して使えます。 しかしWorkShhets("Sheet1")とかのように、シート名を 指定したり(このケースが多い)して、効果や作用が及ぶ範囲を指定するものや、中には Sheets(Array("Sheet2", "Sheet3")).Select ActiveWindow.SelectedSheets.Delete のように複数シート指定もあります。 ActiveSheet、SelectedSheetなどで、具体的にコード上では指定せず、一般化することもあります。 Worksheets("Sheet1")の部分を実行時に変化させたものを指定することも可能です。 要はMacro1で処理したいことが、Sheet(名)や具体的シートごとのセル番地と係わった処理でないか、係わっているなら、それに対処したプログラムの組み方が出来ているかが難しいのですが、それが質問では述べられていません。係わっているならMacro1を実行する前にSheet名等を指定するコードを入れて、Macro1を記述すれば良いだけになります。

wrgudl
質問者

お礼

ありがとうございます。

  • oui1012
  • ベストアンサー率25% (25/97)
回答No.4

あー,それでいけると思いますよ! まずはいろいろ試してみてください~

wrgudl
質問者

お礼

ありがとうございます。 先ほど示したものでうまくいきました。

  • oui1012
  • ベストアンサー率25% (25/97)
回答No.3

#1です. >Sheet1・Sheet2・Sheet3それぞれにコマンドボタンを二つ貼り付けて、 >コマンドボタン1でMacro1を自シートのみに実行して、 >コマンドボタン2で3つのシートに対してMacro1を実行させるようにしたいのですが。 …だとすると,Macro1内で どのボタンが押されたのか,という処理分岐が必要です. あるいは,アクティブページだけを処理するMacro1と, すべてのページを処理するMacro2を作成するのも手です. 共通ロジックは関数にでもして外出ししましょう.

wrgudl
質問者

お礼

ありがとうございます。 >…だとすると,Macro1内で >どのボタンが押されたのか,という処理分岐が必要です. 以下のように、Macro1自体はそのままというのは無理なのでしょうか。 Private Sub CommandButton1_Click() Call Macro1 End Sub Private Sub CommandButton2_Click() Sheet1.Activate Call Macro1 Sheet2.Activate Call Macro1 Sheet3.Activate Call Macro1 End Sub

  • oui1012
  • ベストアンサー率25% (25/97)
回答No.1

"Sheet1・Sheet2・Sheet3に対して実行する"って 何を実行するのでしょうか? Sheet1のセルに対して処理を行い, Sheet2のセルに対して処理を行う…ってことでしょうか?? だとしたら,後はMacro1の中の記述で 各シートに対する処理を記述するだけなのですが.

wrgudl
質問者

お礼

ありがとうございます。 Sheet1・Sheet2・Sheet3それぞれにコマンドボタンを二つ貼り付けて、コマンドボタン1でMacro1を自シートのみに実行して、コマンドボタン2で3つのシートに対してMacro1を実行させるようにしたいのですが。

関連するQ&A

  • エクセルマクロ(VBA)での手順

    エクセルマクロ(Vba)にて、ご教示をお願い致します。 ユーザーフォーム上にデータをクリアするコマンドボタンを沢山貼り付けております。 一括クリアするボタンを作成したのですが長文になってしまいます。 Private Sub CommandButton101_Click()   Call CommandButton1_Click   Call CommandButton2_Click   Call CommandButton3_Click   Call CommandButton4_Click   Call CommandButton5_Click   Call CommandButton6_Click ↓ ↓ ↓   Call CommandButton50_Click End Sub 以下のような内容に置き換えたいのですが、上手くいきません。 For i = 1 To 50 Me.Controls ("CommandButton1" & i & "_Click") Next 本を片手に、やっておるのですが行き詰ってしまいました。 お知恵を拝借させてください。 よろしくお願いたします。

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • EXCELでの変数によるMacro自動実行について

    すいませんが教えてください・・・・・・ EXCELシートにツールボックスより、コマンドボタンを2つ配置しました。 (AUTOMATICはPublic変数で標準モジュールで定義しています Dim AUTOMATIC As Boolean ) ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() AUTOMATIC = True End Sub CommandButton_2 : Private Sub CommandButton2_Click() AUTOMATIC = False End Sub ------------------------------------------------------------------ あとはEXCELを起動中に、AUTOMATICが Trueでセル(例えばA2のセル)の 値が100のときには Macroを起動したいのですが、どこにどう記述したら いいか教えて欲しいのです。 ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() if Cells(2,1) = 100 then 'A2はCells(2,1) Macro実行 end if End Sub とAUTOMATICを使用せずに記述しても、毎回CommandButton_1をクリックしな ければMacroが起動することができないので煮詰まってしまいました。 (一度CommandButton_1をクリックしておくとあとはA2セルを監視するだけ でMacroを起動させたい) すいませんがわかる方、教えていただけないでしょうか よろしくお願いします。

  • エクセルの個人用マクロブック

    「個人用マクロブック」に abc というマクロが登録されています。 コマンドボタンをクリックして abc を実行できるようにしたいのですが。 Sub abc () 処理内容 End Sub Private Sub CommandButton1_Click() Call abc End Sub コマンドボタンをクリックするとエラーになってしまいます。エラー内容は「SubまたはFunctionが定義されていません」です。 VBE画面から直接 abc を実行した場合はエラーになりません。 どこを直せばいいのでしょうか。

  • VBA:助けてください。呼び出してもいないのに独立なプロシージャへ、処理が飛んでしまう。アドバイスお願い致します。

    Useform1のコマンドボタンをクリックすると Private Sub CommandButton1_Click() Call 処理 End Sub というように、「処理」を呼び出し。これで終わるようにしていました。しかし、不具合が出てしまい、ステップインで見てみると「処理」からEndSubに行き、その後Useform2のコマンドボタンイベントのEnd Withへ Private Sub CommandButton1_Click() With Userform1 .... End With ←    ・・・ End Sub 上のように矢印の部分へ飛んでしまいます。全く、独立な、コマンドイベントへ飛んで処理されているのです。それも、飛んだ箇所がEnd Withからです。こんなことがあるのでしょうか? Private Sub CommandButton1_Click() Call 処理 Exit Sub End Sub 上のようにExit Subを追加してもやはりそこから飛んでしまいます。 なぜでしょうか?詳しい方アドバイスお願い致します。

  • excel vba です

    シートにActiveXコントロールでボタンを作りました そのボタン押下時、 標準モージュールにあるソースを直接呼出したいのですが、 ボタンとそのモジュールの割り当て方がわかりません 教えてください (1) sheet1 に CommandButton1 というボタンがあります (2) 標準モージュールにある、 Sub test() というモジュールを直接呼び出したい 普通にやると、Sheet1 に Private Sub CommandButton1_Click() というモジュールができてしまいます そこから、Sub test() をcall するのではなく、直接呼び出したいのです 教えてください、宜しくお願いします

  • エクセルVBA ユーザーフォームの終了について

    エクセルVBAでユーザーフォームを作成しています。 コマンドボタンにVBAマクロを割り当てしているのですが 思うように動いてくれないので質問します。 コマンドボタンをクリックしたら望む動作 1、ワークシートを選択 2、その後、ユーザーフォームを消す。 と言う動作にしたいのですが、2の ユーザーフォームを消す方法、書き方が分かりません どなたか教えていただけないでしょうか 1の動作は以下のように書いています。その後の書き方を お願いします。 Private Sub CommandButton8_Click() ブック名 = "VBA演習" シート名 = "sheet1" Workbooks(ブック名 & ".xls").Worksheets(シート名).Activate End Sub (ユーザーフォームの名前は"テストフォーム"としてます)

  • 複数のコマンドボタン(VBAで)を一つにまとめたい。

    複数のコマンドボタン(VBAで)を一つにまとめたい。 Private Sub CommandButton1_Click() Application.Goto Reference:=Range("A7"), Scroll:=True End Sub Private Sub CommandButton2_Click() Application.Goto Reference:=Range("A29"), Scroll:=True End Sub Private Sub CommandButton3_Click() Application.Goto Reference:=Range("A51"), Scroll:=True End Sub Private Sub CommandButton4_Click() Application.Goto Reference:=Range("A73"), Scroll:=True End Sub Private Sub CommandButton5_Click() Application.Goto Reference:=Range("A95"), Scroll:=True End Sub Private Sub CommandButton6_Click() Application.Goto Reference:=Range("A117"), Scroll:=True End Sub Private Sub CommandButton7_Click() Application.Goto Reference:=Range("A139"), Scroll:=True End Sub Private Sub CommandButton8_Click() Application.Goto Reference:=Range("A161"), Scroll:=True End Sub Private Sub CommandButton9_Click() Application.Goto Reference:=Range("A183"), Scroll:=True End Sub Private Sub CommandButton10_Click() Application.Goto Reference:=Range("A205"), Scroll:=True End Sub Private Sub CommandButton11_Click() Application.Goto Reference:=Range("A227"), Scroll:=True End Sub 上記のように複数のコマンドボタンを関数化して一つにすることは出来るでしょうか?

  • VBAのプロパティウィンドウについて

    VBAでプロパティウィンドウには ・Microsoft Excel Object ・フォーム ・標準モジュール があります。 ところで、下のプログラムですが、(1)の部分を標準モジュールに書き込み、フォームにあるコマンドボタンをクリックしたら、"test.xls"が表示されます。 しかし、(1)の部分をMicrosoft Excel Object のsheet1(sheet1)のコードに書き込み、プログラムを実行させると、フォームのコマンドボタンをクリックしても"test.xls"は表示されません。 これはなぜですか? (1)の部分のコマンドボタン1はsheet1に存在します。 (1)----------------------------------- Private file_name as string Private Sub CommandButton1_Click()   file_name="test.xls" UserForm1.Show End Sub (1)----------------------------------- フォーム Sub CommandButton1_Click() MsgBox file_name End Sub

  • EXCEL VBA 印刷

    EXCEL VBA 印刷 初歩中の初歩で申し訳ありません・・・該当シート(Sheet1(名前は別名))の印刷をしたいと思い、ボタンの設定をしたのですが エラーとなります(画像を添付します。) お手数ですが、フォローの程宜しくお願いいたします。 参考までにコードも記載します。 Private Sub CommandButton9_Click() Range("A137").Select End Sub --------------------------上記はこんぼボックスで該当セルへジャンプしています。 Sub 印刷の実行() Worksheests("Sheet1").PrintOut End Sub

専門家に質問してみよう