「マクロ実行中に別のファイルを開き、そこに記録されているマクロを実行したい。」
「新たに開かれる側のファイル名は変数にしておきたい。」
この悩みは、つい先日私が抱えていた悩みです。
やり方をネットで調べてみたところ、ファイル名に変数を使用していない場合であればいくつも紹介サイトが出てきましたが、実行されるマクロファイル名に変数を使用している例がありませんでした。
なんとか試行錯誤の末、できるようになったものの、同じ悩みを抱えている人は多いはず。
というわけで、今回は、マクロ実行中に、変数宣言している別ファイルを開き、その中に記録されているマクロを実行する、という方法をご紹介していきます。
初心者向けに画像多めで解説していきますので、ぜひ最後までご覧ください。
それではさっそくやっていきます!
はじめに
まず始めに今回の前提条件を共有化しておきましょう。
今回は以下の画像のように二つのエクセルファイルを準備しています。
【動かされるマクロ.xlsm】の方には以下のように【macro_test】という名前のマクロが記述されています。
内容は非常にシンプルで、マクロが実行されると
「マクロが実行されました」
というメッセージが表示されるだけです。
この【動かされるマクロ.xlsm】の中に入っている【macto_test】というマクロを、【動かすマクロ.xlsm】を使って実行する方法を、この記事では紹介していきます。
※冒頭でも述べたように、この【動かされるマクロ.xlsm】は【動かすマクロ.xlsm】上では変数として設定した状態で実行していきます。
別ファイルのマクロを実行する方法
まず【動かすマクロ.xlsm】の中身を見てみましょう。
今回はこのように、【動かされるマクロ.xlsm】のファイル名とそのファイルの置き場がセル上に記述された状態にしています。
これらのセルの中身を変数として、
①ファイルを開く
②マクロを実行する
という流れで実行していきます。
そのときの実行コードは以下のようになります。
Sub macro_jikkou()
Dim file_name As String
Dim folder_name As String
file_name = Cells(2, 1)
folder_name = Cells(5, 1)
Workbooks.Open (folder_name & "\" & file_name)
Application.Run "'" & folder_name & "\" & file_name & "'!" & "'macro_test'"
Workbooks(file_name).Close
End Sub
以下のように、動かされるマクロのファイル名、保存場所は変数としています。
file_name = Cells(2, 1):【動かされるマクロ.xlsm】を変数として宣言
folder_name = Cells(5, 1):【動かされるマクロ.xlsm】の保存場所を変数として宣言
これらをつなげることで、ファイルのフルパスを表現しています。
※ ↓ の部分
(folder_name & "\" & file_name
)
フルパスさえ取得できてしまえば、こっちのものです。
この記事の重要ポイント!!
◆別のファイルを開く方法
Workbooks.Open (ファイルのフルパス)
◆別ファイルのマクロを実行する方法
Application.Run “‘” & ファイルのフルパス & “‘!” & “‘【実行されるマクロ名】'”
これだけ覚えておけば別ファイルを開いて、その中のマクロを実行することはできるようになります。
※ちなみに変数を使用しない場合は、ファイルのフルパスを ” で挟んでしまえばOKです。
ちなみにファイルを閉じるときはフルパスにしておく必要はなく、ファイル名さえ指定してあげればOKです。
(すでに開かれているので、わざわざフルパスで言わなくてもPCが理解可能だから)
それでは実際に実行してみましょう!
【動かすマクロ.xlsm】の中に入っている先ほど作った【macto_jikkou】マクロを実行してみます。
実行すると以下のメッセージが現れました。
先ほど記述した、【macto_jikkou】のコードの中にはこのようなメッセージボックスの記述はありません。
これが、【動かされるマクロ.xlsm】の中のコードに記述されている内容です。
しっかりと、別ファイルのマクロが実行されていることが確認できましたね。
おわりに
というわけで今回は別のファイルを変数を使って開き、その中のマクロを実行する方法をご紹介しました。
複雑な処理になればなるほど、このようなスキルが必要になってきますので、ぜひマスターしていおきましょう。
このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。
■業務の生産性を上げたい。
■早く帰って子供と遊びたい。
こんな人はぜひ他の記事も読んでみてください。
また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。
私にわかる範囲であればご協力いたしますので。(もちろん無料です。)
最後に・・・
この記事が役に立ったという方はぜひ応援よろしくお願いします。
↓ 応援ボタン
Twitterもやっていますので、興味があれば覗いてみてください。
それではまた!!
コメント