• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:乱数を発生させ、発生した数に対応するファイルが自動)

Excel2013で乱数に応じたマクロ付きファイルを自動的に起動する方法について

このQ&Aのポイント
  • Excel2013で乱数を発生させ、その数に応じたマクロ付きファイルを自動的に起動する方法はありますか?A1からA6までのマクロ付きファイルがありますが、ファイルXを作成して乱数に応じたファイルの起動とマクロの実行を自動化したいです。
  • Excel2013を使用しています。A1からA6までのマクロ付きファイルを用意していますが、手動で起動し、マクロを実行する必要があります。そこで、ファイルXを作成して、乱数を発生させ、その結果に応じてファイルの起動とマクロの実行を自動化したいです。
  • Excel2013を使用しています。A1からA6までのマクロ付きファイルがありますが、手動で起動してマクロを実行する必要があります。ファイルXを作成し、乱数を発生させて、それに応じてファイルの起動とマクロの実行を自動化できる方法はありますか?

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

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

そちらの環境に合わせてください。 Option Explicit Sub Test() Dim r As Integer Dim s As String r = Int(Rnd * 6) + 1 s = CStr(r) Workbooks.Open "D:\Programming\A" & s & ".xlsm" '←フォルダの位置関係 Application.Run "A" & s & ".xlsm!Test" '←「Test」を開いたファイルのマクロの名前 End Sub 現在、「A~.xlsm」ファイルを開いたときのマクロの名前は同一、という前提で組んでいます。 また、フォルダ名を直接指定していますが、もし、いろんなフォルダで実行する可能性がある場合は、元のファイルと「A~.xlsm」ファイルが同じフォルダなら、方法はあります。 Set o = CreateObject("Scripting.FileSystemObject") のあと、 Set f = o.GetFolder(".") とすれば、「f」に現在のフォルダ位置が取り込まれますので、「f & "\A~.xlsm」で開くことができます。

noname#245924
質問者

補足

ご回答有難う御座います。 試したのですが、なぜか、A5だけ マクロが実行されます。

その他の回答 (3)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

回答No.3です。 まず、「A1~5」のファイルは、開きますか? 次に、「A1~5」のマクロの「Sub ~」の名前は、具体的にどうなっていますか? 私が試したときは、すべて「Sub Test()」で試しましたので、プログラム中でも、直接「Test」と固定していますが、もしかして、ファイルごとに、名前が違うのでしたら、それを教えてください。 書き直します。

noname#245924
質問者

お礼

ご回答有難う御座いました。 何回もやると、やはり教えて頂きましたやり方で、上手く処理できました。

noname#245924
質問者

補足

ご回答有難う御座います。 下記で実行しますと、正常に乱数が発生しました。 なぜか、コードを途中で止めると、同じ数(例えば5)が繰り返されます。 rとsを強制的に初期化することはできないでしょうか? Sub Test() Dim r As Integer Dim s As String r = Int(Rnd * 6) + 1 s = CStr(r) MsgBox r End Sub

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

開くファイルのThisWorkbookモジュールでWorkbook_Openを使えば起動時に自動でマクロが実行されますがそれを利用しないという事でしたら プロシージャ名がtestで開くファイルが同一フォルダにあるとした場合 Workbooks.Open ThisWorkbook.Path & "\A2.xlsm" シートモジュールなら Call Application.Workbooks("A2.xlsm").Sheets(シート名).test 標準モジュールなら Application.Run "a2!Test" でいかがですか。

noname#245924
質問者

お礼

ご回答有難う御座いました。

  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.1

1~6 の乱数を生成するには、つぎの式で良いと思います。 =ROUND((RAND()*5+1),0) Xファイルを手動で開くとマクロが自動実行され、それによりファイル1~6が開き、開いたファイルのマクロが自動実行されるようにするには、すべてのファイルのマクロの名前を Auto_Open() とするか、イベントプロシージャ(Workbook_Open) を使います。 ブックを開くコードは、(余計なお世話かもしれませんが) Workbooks.Open "D:\1.xlsx"

noname#245924
質問者

お礼

ご回答有難う御座いました。

関連するQ&A