人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルマクロで、ひとつのマクロの中でほかのマクロを呼び出し、実行させたいのですが、やりかたがよくわかりません。
functionを使うのでは・・・?とか思うのですが・・・。

マクロを事前に何個も実行させるのではなく、ポチッとひとつだけ
実行したら終わるようにしたいのです。
今回の例ではマクロが2つですが、何個もマクロがあるので、メインのマクロをスタートさせたらすべてのマクロが動くようにしたいと考えています。
ご協力お願いします。詳細はコメントに記載します。


●質問者: yuko0909
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ひとつ エクセル コメント スタート ポチッ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● pahoo
●0ポイント

お気づきのように、マクロ1に Functionプロシージャ を使います。

ご質問のケースでは、以下のような構造になります。

「ポチッとひとつだけ実行したら」が macro2 の方です。ここから macro1 を呼び出し、計算結果を macro2 の変数 x に代入します。

Function macro1(引数1, 引数2....)
 ....
 macro1 = このファンクションが返す値
End Function

Sub macro2
 ....
 x = macro1(引数)
 ....
End Sub
◎質問者からの返答

回答ありがとうございます。

質問なのですが、

>D列?G列にはマクロ1を実行してえられた結果(a1.xlsのシート2)のA列?D列を出力する。

という部分をするにはマクロ1のほうに、その出力の過程も書くのでしょうか?

(たとえば「.Range("D" & i).value = sheet2.Range("A" & i).valueとかみたいな出力の部分)

それとも、これはマクロ2のほうに書くのでしょうか?


2 ● rome0315
●0ポイント

マクロ1はa1.xlsにあり、マクロ2はaaa.xlsにあるとうことでしょうか?

a1.xlsでマクロを実行して,aaa.xlsのマクロを呼び出したいということであれば、

下記のようなマクロをa1.xlsで実行すればできると思います。


Sub MacroRun()

Macro1

Application.Run "aaa.xls" & "!Macro2"

End Sub

◎質問者からの返答

回答ありがとうございます。

>マクロ1はa1.xlsにあり、マクロ2はaaa.xlsにあるとうことでしょうか?

⇒はい、マクロ1はa1.xlsに、マクロ2はaaa.xlsにあります。

>a1.xlsでマクロを実行して,aaa.xlsのマクロを呼び出したいということであれば、

>下記のようなマクロをa1.xlsで実行すればできると思います。

⇒逆で、aaa.xlsでマクロを実行して、aaa.xlsのマクロを呼び出したいのです。教えていただいたもののマクロ1とマクロ2を逆にすればいいんですよね?


3 ● rome0315
●0ポイント

回答の補足です。

上記だと、aaa.xlsが開かれていないとエラーになります。

ファイルを開閉する処理を入れました。

開くときのファイルは絶対パスで指定してください。

Sub MacroRun()

'マクロ1を実行

Macro1

'aaa.xlsを開く

Workbooks.Open "C:\aaa.xls"

'aaa.xlsのマクロ2を実行

Application.Run "aaa.xls" & "!Macro2"

'aaa.xlsを閉じる

Workbooks("aaa.xls").Close

End Sub

◎質問者からの返答

補足回答ありがとうございます。

macro1、macro2はa1.xls、aaa.xlsに事前に設定してあり、さらにmacroRunというマクロをa1.xlsに組み込むということですか?


4 ● pahoo
●50ポイント

マクロ1のほうに、その出力の過程も書くのでしょうか?

どちらでも構いません。

ただ、マクロ1とマクロ2の役割分担は、あらかじめ明らかにしておくのが定石です。

そこで、私だったら、コメントにあるマクロ1の仕様を以下のように改めます。単一列のコピーのみをマクロ1に負わせた方が、汎用性があると考えたので。


マクロ1

名称 Function macro1
引数 file0 コピー元のExcelファイル名
sheet0 file0の中で処理対象とするシート名
col0 コピー元の列名
col1 コピー先の列名
戻り値 macro1 TRUE/FALSE(処理が成功したかどうか)
◎質問者からの返答

ありがとうございます。やってみます。


5 ● rome0315
●50ポイント ベストアンサー

> ⇒逆で、aaa.xlsでマクロを実行して、aaa.xlsのマクロを呼び出したいのです。

> 教えていただいたもののマクロ1とマクロ2を逆にすればいいんですよね?

はい。同じbook内のマクロであれば、マクロ名だけで呼び出せます。

別のbookのマクロはファイルを開いた状態で「Application.Run "ファイル名!マクロ名」で呼び出せます。


> macro1、macro2はa1.xls、aaa.xlsに事前に設定してあり、

> さらにmacroRunというマクロをa1.xlsに組み込むということですか?

macroRunの名前はなんでもいいんですが、自分がメインとしたいファイルに組み込んでください。

◎質問者からの返答

ありがとうございます。さっそくやってみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ