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

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

乱数を発生させ、発生した数に対応するファイルが自動

A1からA6まのでマクロ付きファイルが6個あります。 ファイルXを作り1~6の乱数を発生させて、例えば2が発生したとき、A2ファイルが自動的に起動してマクロを実行させるマクロ付きファイルXを作成することは可能でしょうか? 可能な場合、ファイルXのマクロはどのようになるでしょうか? 流れを書くと以下のようになります。 (1) ファイルXを(手動で)起動 (2) ファイルXのマクロを(手動で)起動 (3) (マクロにより)乱数が発生 (4) 例えば、乱数が“2”である場合、A2ファイルが自動的に起動 (5) A2ファイルのマクロが自動的に起動 (6) (A2ファイルのマクロが実行) (7) (A2ファイルのマクロが終了) ・Excel2013を使っています。 ・A1からA6まのでマクロ付きファイルは既に作成済です。  但し、そのファイルは起動しても自動的にマクロを実行せず、手動で起動できる状態です。

noname#245924
noname#245924

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

  • ベストアンサー
  • 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
  • ベストアンサー率65% (1618/2457)
回答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

  • VBA AからZで乱数を発生させたい

    Sub AからZで乱数を発生させる() Dim 最大値 As Integer Dim 最小値 As Integer Randomize 最小値 = 1 最大値 = 10 Debug.Print Int((最大値 - 最小値 + 1) * Rnd + 最小値) End Sub --------------------------------------------------------- これを実行すると、1から10の間で乱数を発生させられるのですが、 AからZの間で乱数を発生させたい場合は、 このコードをどのようにすればいいでしょうか? アドバイスよろしくお願いします。

  • エクセルファイルの自動起動と内容更新

    エクセルファイルを自動で起動させ、標準モジュールで書かれたマクロ(新しいブックを作成し、そのブック内シートに値を代入)を実行させマクロ実行時に作成されたファイルを上書き保存させる方法ってありますか? コマンドボタンを配置して、上記を実行させることはできますが、自動起動はタスクを使用すればいいのかな~くらいしかわかりません。 どこかに詳しいページご存知ありませんか?

  • 線形合同法(乗算型)による乱数発生法

    javaを使って乱数を発生するプログラムを作っています。 線形合同法(乗算型)に基づいて発生させようと思うのですが、疑問点があり質問しました。 乱数発生の漸化式 X(i+1)= a*X(i) (mod M) で、a,M,そして乱数の初期値を決めたいのですが、ネットを使って調べたところ、 a=16807 M=2147483647 が良いという記述がありました。 しかし、これをプログラムに反映させるとintの範囲から出てしまうため、検出値にマイナスが入ってしまいます。 また乱数の初期値に関する記述が見つからなかったので、どのような値にすべきか悩んでいます。 また、検出値をある範囲に(例えば100000まで)にしたい場合は、M=100000にすればいいと思うのですが、その場合のaや初期値の値はどのように決定したらよいのでしょうか? 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Java
  • 【エクセル】あるセルのみ自動再計算させない方法

    はじめて質問させて頂きます。 RAND関数は再計算されるたびに新しい乱数が発生します。 同シート内にRAND関数とその他関数(四則演算等)が混在しているとき、その他関数は自動計算されRAND関数だけは手動再計算(F9でなくてもいいです)で実行されるようなことは可能でしょうか? マクロは使いたくないです。(っていうか、マクロは解りません。) 宜しくお願い致します。

  • htmlの乱数

    まず <a href="http://1249?url=http%3D12345&guid=ON">試作</a> というリンクがあったとします ここで ~%3D【12345】&~ この【】内の数字だけを乱数にしたい場合どうしたら良いでしょうか? 更に乱数にしてから自動的に何度かこれを繰り返させたい場合の書き方も教えて下さい

  • imacroで組んだマクロをバッチファイルで自動実行させたい。

    imacroで組んだマクロをバッチファイルで自動実行させたい。 Firefoxアドオンの「imacro」でマクロファイルを作成したので、それをバッチファイルで起動できるようにし、コンピュータ起動時に自動的に実行されるようにタスクスケジューリングしたいと思っています。 バッチファイルには以下のコマンド書けば可能かと思ったんですが、実行されません。 start "C:\Program Files\Mozilla Firefox\firefox.exe" http://run.imacros.net/?m=マクロファイル名.iim 良い方法を知っておられる方がおられましたらご教授願います。

  • エクセル2003のマクロが自動実行されてしまいます

    宜しくお願いいたします。 エクセル2003で、マクロ記録で作成したマクロを登録したのですが、そのファイルを開くと時、マクロを有効にするにすると作成したマクロが起動してしまいます。マクロを無効にすると、マクロが表示されなくなります。シフトをおしながら有効にする方法は、分かったのですが、マクロを有効にするにしても、開いた後に、手動で実行するまで、 止めておきたいのですが、設定方法は無いでしょうか?

  • Excel個人用マクロブックが自動起動しなくなりました。

    Excel個人用マクロブックが自動起動しなくなりました。 Excelで個人用マクロブックが自動起動しない現象が起きています。 D:\\Documents and Settings\\<user>\\Application Data\\Microsoft\\Excel\\XLSTART\\の中にPERSONAL.XLSは存在しているのですが、従来は起動していたのですがいつのまにか起動しなくなっていました。オプション「全般」の「起動時に全てのファイルを開くフォルダ」が空白になっていたので、上記パスを入れてみましたが変わりありませんでした。また、個人用マクロブックに記録しようとすると「個人用マクロブックは記録用に開かれた状態になっていません」とエラーになります。手動でPERSONAL.XLSを開くとその時は使えるのですが、Excelを終了するとやはり次回から自動起動しません。 OSはWindows XP、Excel2007です。この現象の解決方法をご存知の方、助け下さい。 補足 前に同じような質問をしている方もいたのですが、Excel2003だったようで、回答をみてもしっくりきません。

  • EXCEL マクロ コマンドボタンで複数ファイルの制御は可能?

    Excelのマクロを作成しています。 <マクロの内容>  AファイルからBファイルへデータをコピ&ペーストしたり、Bファイル内のセルを結合したり、結合解除したりしています。 <状況>  Aファイル内(標準モジュール)にマクロを作成し[マクロの実行]から実行させたところ成功しました。  Aファイル内(Microsoft excel objects Sheet1)にボタンを作成し、そのボタンを押すことで同様にしようとしたところBファイルを操作するところでエラーが発生しました。  ファイル間でデータをやり取りしたり、マクロの入っていない側のファイルのセル情報を変更させたいのですが、ボタンで実行させるにはどうすればいいのでしょうか?

  • 乱数によって発生したデータの関係式の抽出

    [0 : 1]の範囲で乱数xを発生させ、その乱数xを使ってy=0.5 x^2 を計算しました。乱数による(x, y)のペアが数多くできています。この乱数のペアをデータとして与えて、これがy = 0.5 x^2という関係式になっていることを見破れるか、ということを考えます。データをプロットして雰囲気を調べる、というようなことはナシで、データ処理としてできるかということですが。y=a+bx+cx^2+dx^3などと仮定して最小二乗法でa,b,c,dを決めてみると、a=b=d=0, c=0.5となるのでしょうか。単純な最小二乗法でよいのでしょうか。すなわち、誤差の評価式をa,b,c,dで偏微分してゼロとなる代数方程式を解いてa,b,c,dを決めるということですが。 これに関連して疑問なのですが、手始めとして一旦、(x,y)の相関係数を調べてみたとします。これは両者が直線関係(すなわち1次)になっていることを想定してどの程度1次なのかを見るという性格があると思います。例えばy=a+bxとひとまず考えて、最小二乗法でa, bを計算することはできます。2次曲線だけども1次で近似したようなものですね。aはかなり小さいでしょうが、a,bとも非ゼロ値が出てきそうです。その後、近似を上げようと思って、y=a+bx+cx^2としてa,b,cを求めると先に直線と考えて求めたa,bとは違う値(正解のa,bゼロでc=0.5)になるのでしょうか。 この問題は、正解が多項式であり、近似式も1次、2次、...と高次になっていくのでたまたま答えであるx^2が出てきたということは言えそうですが、もし発生させる関数がもっと手の込んだもの(sin, cosなど)だったら関数形を見破れないのではないでしょうか。たまたま発見されるということはあるかも知れませんが。 y=0.5 sin(x)としてxの乱数を発生させ(x,y)のペアを作って、関数形を推測させるということですが、たまたま、sin(x)とyについて相関係数を調べたら1となるわけで、 y=a+b sin(x)で最小二乗法をすると、a=0, b=0.5となるわけですね。これはたまたま見つかったということですね。偶然に依らない方法はあるのだろうかということですが。

専門家に質問してみよう