質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

2533閲覧

VBAにて他ブックマクロを他ブックに適用させるマクロを作成したい

Ta-Jn

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/07/08 08:02

編集2020/07/09 04:14

詳細は
修正パッチマクロA、中間実行マクロB、固定の適用Excelシートがあるとして

修正Aを起動した際に中間マクロBを起動させ
中間マクロBで修正Aの処理を適用Excelシートに適用させたいのです。
狙いとしては修正マクロAを組んだ際に繋ぎだけを変更すれば
中間マクロBを使って適用Excelシートにすべて適用される流れを
実装しようと思っています。
修正A→中間B→適用C

VBA初心者なのでそもそもこのやり方が適切なのかわかりません、
また、修正Aから適用Excelにそれぞれ適用させたほうが楽なのか?
という疑問もあります。(毎回処理を記入するのが大変だと思いますが、)
修正A→適用C

ご教授の際にこの方法を使えば実装できるヒントなどをいただければと思います。

お手数をおかけしますが宜しくお願いします。

追記---------------------------------
ファイルとしては
・修正パッチマクロ.xlsm
・中間実行マクロ.xlsm
・固定の適用ファイル.xlsx
の構成で

修正パッチマクロ.xlsmは修正内容によってマクロの内容が変わります。
中間実行マクロ.xlsmは修正パッチマクロを適用ファイル.xlsxに反映させるマクロを組む形
固定の適用ファイルは複数の定型ファイルになります。

目的例としては
複数事業部の定型ファイルがあったとし、そのファイルの変更や修正を頻繁に行いたい。
その際に修正パッチマクロは都度作成し、中間実行マクロと繋げてあげるだけで
複数事業部のファイルにそれぞれ適用されるというふうな構成をつくりたいです。

なので流れとして
修正マクロAを
中間マクロBで持ってきて
適用マクロCに実行です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2020/07/08 10:19 編集

処理対象のWorkbook・Worksheetを明示すれば、VBAの含まれていないブックに対して処理を行うことは可能ですが、 修正A→中間B→適用C のイメージがよくわかりません。 ごく簡単な例でもいいので「修正A→中間B→適用C」のサンプルを追記してもらえないでしょうか?
meg_

2020/07/08 11:25

修正パッチマクロA、中間実行マクロB → xlsmファイル、固定の適用Excelシート → xlsxファイル ということでしょうか? であれば不可能ではないと思いますが、こういう構成はやったことないですね。 処理を分けたいのであれば関数や引数で対応した方がよいかと思います。
Ta-Jn

2020/07/09 04:16

お二人の方、回答ありがとうございます。 サンプル例を編集にて記載しましたので、もしお時間ありましたら アドバイスのほうを宜しくお願いします。
meg_

2020/07/09 11:57

他のマクロを実行する方法は検索すれば見つかりますので、試してみれば良いと思います。コードを書いて具体的に困りごとが発生したらまた質問すれば良いでしょう。
Ta-Jn

2020/07/10 02:22

ご教授ありがとうございます。
h.horikoshi

2020/07/13 02:23

Aがプロセサ(部品)でBがドライバってことかな? たとえば、Bは処理すべきファイルの一覧を持っていて、 その各々のファイルについて実処理Aを呼び出すとか? これだと、Aの中に対象ファイル群の情報やループを抱え なくて済むので、(いろいろなAが)同じ対象ファイル群に 処理をする場合には管理しやすいかもしれないですね。
Ta-Jn

2020/07/14 00:48 編集

h.horikoshi様 はい、そちらの認識であっています。 やはり素人が運用するのといちいち書くのもめんどうなので 固定の処理は別で用意したほうが運用する側も楽なのかな?と思いまして。 しかしなかなか回りくどいやり方なので こういった場合に皆さんどういった対応されてるのか気になり質問しました。
h.horikoshi

2020/07/15 00:59

対象となるファイルの一覧が固定でなく、作るのにマクロが必要な場合などでは ご質問の方法もアリかなと思います。 たとえば当方の例ですが、 ・フォルダ構成として、ルートフォルダ配下に部や課のフォルダ(組織階層と同じ構造) があり、その中に命名規約で識別される各種ファイルがあります。 ・全社を対象にファイルを処理する場合は (1)ルート配下から全フォルダを検索し、命名規約で抽出して対象ファイルの一覧を作成 (2)一覧の各々について処理 というしくみを作っています。ご質問の方法のBが(1)、Aが(2)に相当するかと。 なぜこんな構造にしたかというと以下の理由によります。 ・リアルタイムの組織変更やファイルの部署間移管に対応できる ・Bの部分のバグ修正、エンハンスが容易 ※BをAに組み込むこともできますが、それだとBの部分の修正は A毎に必要になりますので、Aが沢山あるとちょっとたいへんです。
Ta-Jn

2020/07/17 02:52

h.horikoshi様 ありがとうございます。 上記を参考にしながら組んでみます!
guest

回答2

0

ベストアンサー

遅くなりましたが、質問を読んで自分が思ったイメージをざっくり置いておきます。

ユーザーが直接操作するマクロ入りブックは「中間実行マクロ.xlsm」とします。

  1. ユーザーが「中間実行マクロ.xlsm」のマクロ(下記コードではEntryPoint)を起動
  2. ダイアログでユーザーが対象のブックを指定(指定方法は別途検討)
  3. 「中間実行マクロ.xlsm」が、何らかの情報を元に適用する「修正パッチマクロ.xlsm」を特定(下記コードでは直書き)
  4. 「中間実行マクロ.xlsm」が 2. でユーザーが指定したファイルに「修正パッチマクロ.xlsm」を適用

vba

1'中間実行マクロ.xlsm の中の処理。 2 3Public Sub EntryPoint() 4'https://teratail.com/questions/276054 5 6 '対象のブックの選択(方法は要検討)。 7 Dim targetBookPath As Variant 8 targetBookPath = Application.GetOpenFilename("Excelファイル,*.xlsx") 9 10 If VBA.Information.VarType(targetBookPath) = vbBoolean Then Exit Sub 11 12 '「修正パッチマクロ」のフルパス(ここでは直書きしているけれど、別に管理した方がよい)。 13 Dim patchMacroPath As String 14 patchMacroPath = ThisWorkbook.Path & Application.PathSeparator & "修正パッチマクロ.xlsm" 15 16 '「修正パッチマクロ」の中の実行したい処理(モジュール名.プロシージャ名 ここでは直書きしているけれど、別に管理した方がよい)。 17 Dim macroName As String 18 macroName = "Module1.PatchA" 19 20 '対象のブックを開いて、パッチを適用する。 21 Dim targetBook As Excel.Workbook 22 Set targetBook = Workbooks.Open(targetBookPath) 23 Call ApplyPatch(targetBook, patchMacroPath, macroName, "あ", "い", "う") 24 25End Sub 26 27'inTargetBook :処理対象のブック(適用ファイル.xlsx)。 28'inPatchBookPath :修正パッチマクロ.xlsm のパス。 29'inPatchMacroName :修正パッチマクロ.xlsm の中のプロシージャの名前。 30'inOptionalArgs :任意の追加情報。 31Public Function ApplyPatch( _ 32 ByVal inTargetBook As Excel.Workbook, _ 33 ByVal inPatchBookPath As String, _ 34 ByVal inPatchMacroName As String, _ 35 ParamArray inOptionalArgs() As Variant _ 36 ) As Variant 37 38 Dim appXl As Excel.Application 39 Set appXl = inTargetBook.Application 40 41 '修正パッチマクロ.xlsm を開く。 42 Dim patchBook As Excel.Workbook 43 Set patchBook = appXl.Workbooks.Open( _ 44 inPatchBookPath, _ 45 ReadOnly:=True _ 46 ) 47 48 Dim macroName As String 49 macroName = "'" & patchBook.Name & "'!" & inPatchMacroName 50 51 'Application.Run で inPatchMacroName で指定したマクロを実行&結果取得。 52 Let ApplyPatch = appXl.Run(macroName, inTargetBook, inOptionalArgs) 53 54 '修正パッチマクロ.xlsm は閉じておく。 55 patchBook.Close SaveChanges:=False 56 57End Function

vba

1'修正パッチマクロ.xlsm の中の処理。 2 3'Application.Run で呼び出される処理。 4 '他の処理を追加する場合も引数はこれと同じ型・数であること。 5Public Function PatchA(ByVal inBook As Excel.Workbook, inArgs() As Variant) As Variant 6 '1枚目のシートに現在時刻と、引数の文字列を設定し、設定した現在時刻を返す。 7 8 Dim ws As Excel.Worksheet 9 Set ws = inBook.Worksheets.Item(1) 10 11 ws.Range("A1").Value = VBA.DateTime.Now 12 ws.Range("A2").Value = VBA.Strings.Join(inArgs) 13 14 Let PatchA = ws.Range("A1").Value 15End Function

投稿2020/07/14 10:55

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

レスがつかいないのは発想がおかしいからだと思って拝見していました。

そもそも仕様が変わらない前提でマクロを使うほうがいいと思います。
(ヒアリングして標準化してから公開)

マクロは使い捨ての認識でつかうべきだと個人的に思います。

仕様変更に対応したい気持ちはわかりるのですがWEBアプリ(ゲーム)のように

リリースを繰り返すアプリを想定するのは少し違いませんか・・・

配信するとかという発想をするとシートの構成もかわりますし業務が複雑化します。

余計なお世話だと思いますが、レスがないようですので余興だと思って気軽にする―してください。

投稿2020/07/09 08:59

編集2020/07/09 09:08
mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ta-Jn

2020/07/10 02:21

ご回答ありがとうございます。 今回IT知識があまりない友人からこういったもの作ってほしいといわれVBAを調べ 毎回マクロを組める側からすると使い捨てでやりなよって思いました。 ただ、その固定概念の先になにかあると信じてこのマクロを組んでみます。 発想はおかしいのは私も思いましたが、逆におもしろい発想だなとも思いましたね。
mako1972

2020/07/10 23:28

サーバを立てるアプリなら 分かりますよ。 必ずサーバ経由なので。
mako1972

2020/07/10 23:33

おそらく友人は 全く目的のことなることを平気で 提案するようになり アプリが破綻するような気がします。 書籍とかにも情報がないと 思いますので逆にこのサイトで 解決してほしいと思います。 チャレンジ精神はいいと思います。
mako1972

2020/07/11 00:06 編集

GOOGLEスプレットシートを 活用するなど流行りなので 変化球を入れると面白そうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問