- ベストアンサー
ファイルパスを複数指定してファイルを順に取り込むマクロの作成方法
- シートに書かれたファイルパスを利用して、複数のファイルを順に取り込むマクロを作成したいです。ファイルの絶対パスをセルに書くことで、そのパスからファイルを取り込むことができます。
- 一度に複数のファイルを取り込むことができますが、取り込むファイルはシートに書かれたファイルパスによって決まります。ファイルパスはA1から順に書かれており、その順番通りにファイルを取り込みます。
- マクロは事前に指定されたファイルパスからファイルを取り込むようになっており、ファイルの指定の手間を省くことができます。取り込むファイルは最大で5つまでで、ファイルパスによって異なるファイルを取り込むことができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
簡単に書きます。考え方です。 >ファイルを指定してファイルを取り込むマクロ 今はファイルもこのマクロの中で指定されていると思います。 これを 「ファイル名をマクロの引数として与えて実行、その引数のファイルを取り込むマクロ」 という構造にかえてやります。 SUB AAA(FL) ← 取り込み用マクロ、ファイル名を与えてやる。()を(filename as string) OPEN FL ← openの後に記載しているファイル名を変数filenameに変えることで汎用化になる。 取り込んだ処理 END SUB SUB CALLAAA ← 実行させるマクロ FL1=A1の値 ←A1セルの値を変数に設定する CALL AAA(FL1) ←取り込み用マクロAAAを実行する、引数はA1の内容でファイル名の値 FL2=A2の値 ←A2セルの値を変数に設定する CALL AAA(FL2) ←取り込み用マクロAAAを実行する、引数はA2の内容でファイル名の値 FL3=A3の値 ←A3セルの値を変数に設定する CALL AAA(FL3) ←取り込み用マクロAAAを実行する、引数はA3の内容でファイル名の値 ・・・ (5回分) ・・・ END SUB エクセルの画面から マクロを実行させるのは今までの「sub AAA」でなくて「sub CALLAAA」、 「sub CALLAAA」の中で「sub AAA」を繰り返し実行してくれます。 取り込みn回分を一気に実行してくれるマクロ、 と 取り込み用マクロ、 になります。 マクロからマクロを実行、親-子みたいな関係です。 分かるところから、少しずつ片づけてみてください。 -------------------- sub xxx end sub や function xxx end function と記載することで、 マクロの記録保存のほか、 自分のオリジナルの処理を記載できます。 -------------------- http://www.asahi-net.or.jp/~zn3y-ngi/YNxv252.html#1 ここのサイトの「ブックシート」、ファイル操作も参考になります。
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
まず、今のマクロの仕組みでも何とか使えるということですので、コピーする等して残しておいて下さい。 今のマクロで、ファイルをどう与えてますか。処理するたびに記載を修正してやってますか。ファイル指定している箇所に着目します。 今あるマクロに対してファイル名の情報は外部から与えることできます。そうすると毎回違うファイルで実行することが可能です。イメージです。 SUB AAA() OPEN XXX 取り込んだ処理 END SUB を SUB AAA(FL) OPEN FL 取り込んだ処理 END SUB SUB CALLAAA FL1=A1の値 CALL AAA(FL1) FL2=A2の値 CALL AAA(FL2) FL3=A3の値 CALL AAA(FL3) END SUB こんなのでよければひとまず出来そうです。何ファイルでも、というのはこの次の課題ステップです。 ファイル選択ダイアログ使ってますか。どちらかと言えばこちらを覚える。いろんな場面で使い道あります。
補足
回答ありがとうございます。 参考に作ってみましたが、中々上手くいきませんでした。。 Sub CALLAAAとありますが、これは関数ではないのでしょうか? AAAとCALLAAAの関係がいまいち理解できず、 Sub AAA(FN)の時点からデバッグすら動きませんでした。 よければもう少しヒントをください。
- rivoisu
- ベストアンサー率36% (97/264)
Excelに取り込むということでそのファイルはExcelでOpenできるファイル(XLS,CSV等)ということでしたら workbooks.open range("A1") でオープンできオープン直後はそのファイルがactiveになります。 だからこれをFor Next などで回してやればいい。 例えば絶対パス名が書かれている範囲をselectして Sub sss() Dim RG As Range For Each RG In Selection そのブックに対する処理 Next End Sub で処理できます。
補足
回答ありがとうございます! Sub sss() Dim RG As Range For Each RG In Selection そのブックに対する処理 (ファイルを開いて、シートを一枚取り込むという処理) Next End Sub rivoisuさんが回答してくださったコードを参考に作ってみましたが、 workbooks.open range("A1") という処理をいつ入れるのか分かりませんでした。 また、A1のファイルを取り込んだら続けてB1のファイルを、と順に取り込み、 セルにパスが書かれていなければ取り込み処理を終了する、といったことをこのコードでできるか よければまた回答をお願いします。
お礼
ありがとうございます。 なんとか完成することが出来ました。