ファイルパスを複数指定してファイルを順に取り込むマクロの作成方法

このQ&Aのポイント
  • シートに書かれたファイルパスを利用して、複数のファイルを順に取り込むマクロを作成したいです。ファイルの絶対パスをセルに書くことで、そのパスからファイルを取り込むことができます。
  • 一度に複数のファイルを取り込むことができますが、取り込むファイルはシートに書かれたファイルパスによって決まります。ファイルパスはA1から順に書かれており、その順番通りにファイルを取り込みます。
  • マクロは事前に指定されたファイルパスからファイルを取り込むようになっており、ファイルの指定の手間を省くことができます。取り込むファイルは最大で5つまでで、ファイルパスによって異なるファイルを取り込むことができます。
回答を見る
  • ベストアンサー

ファイルパスを複数書いて、そのファイルパス全てからファイルを順に取り込

ファイルパスを複数書いて、そのファイルパス全てからファイルを順に取り込みたい。 A1,B1.C1・・・と、セルにファイルの絶対パスを書いて、A1から順に書いてあるファイルパスだけそのパスからファイルを取り込むマクロを作りたいです。 ファイルを指定してファイルを取り込むマクロを作ったのですが、毎回ファイルを指定するのが面倒です。 なので、シートにあらかじめファイルパスを書いておいて、そのファイルパスからファイルを取り込むようにしたいです。 取り込むファイルは複数で、その時によって違います。(といっても、多くても5つくらいですが・・・) どなたか作り方を教えていただけませんでしょうか。 質問内容が分かりづらかったらすみません。 何かあれば補足いたしますのでよろしくお願いします。

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

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.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 ここのサイトの「ブックシート」、ファイル操作も参考になります。

ka125ni
質問者

お礼

ありがとうございます。 なんとか完成することが出来ました。

その他の回答 (2)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

まず、今のマクロの仕組みでも何とか使えるということですので、コピーする等して残しておいて下さい。 今のマクロで、ファイルをどう与えてますか。処理するたびに記載を修正してやってますか。ファイル指定している箇所に着目します。 今あるマクロに対してファイル名の情報は外部から与えることできます。そうすると毎回違うファイルで実行することが可能です。イメージです。 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 こんなのでよければひとまず出来そうです。何ファイルでも、というのはこの次の課題ステップです。 ファイル選択ダイアログ使ってますか。どちらかと言えばこちらを覚える。いろんな場面で使い道あります。

ka125ni
質問者

補足

回答ありがとうございます。 参考に作ってみましたが、中々上手くいきませんでした。。 Sub CALLAAAとありますが、これは関数ではないのでしょうか? AAAとCALLAAAの関係がいまいち理解できず、 Sub AAA(FN)の時点からデバッグすら動きませんでした。 よければもう少しヒントをください。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

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 で処理できます。

ka125ni
質問者

補足

回答ありがとうございます! Sub sss() Dim RG As Range For Each RG In Selection そのブックに対する処理 (ファイルを開いて、シートを一枚取り込むという処理) Next End Sub rivoisuさんが回答してくださったコードを参考に作ってみましたが、 workbooks.open range("A1") という処理をいつ入れるのか分かりませんでした。 また、A1のファイルを取り込んだら続けてB1のファイルを、と順に取り込み、 セルにパスが書かれていなければ取り込み処理を終了する、といったことをこのコードでできるか よければまた回答をお願いします。

関連するQ&A

  • Excel マクロ 指定フォルダ内のファイルを順に開き処理をする方法は?

    マクロ初心者の私ですが、仕事で必要になってしまい、すがる思いでこちらに質問しました。 指定したフォルダ内のファイルを順に開き、 処理を行いたいのです。 初心者なので、解りにくい説明かもしれませんが、もう少し詳しく書くと、 (1)指定したフォルダ"c\見積"の最初のファイルを開く (2)sheet1のA列からK列のデータをコピーする。 (3)ドライブCの"請求書"というファイルのsheet1のセル"H2"を起点にして貼り付ける。 (4)コピー元のファイルを閉じる。 (5)"c\見積"内の次のファイルを開く。 (6)フォルダ内の最後のファイルまで(2)~(5)の作業を繰り返す。 こんな感じなのですが、この様な書き方でご理解いただけるでしょうか? よろしくお願いします。

  • エクセル マクロ 複数ファイルを1枚のファイルに

    お世話になります。 私の業務で、多数のエクセルシートを1つのファイルにまとめ、 その上で縦串を通して合算を出す、という作業が頻発しております。 様々な資料で同様の作業が行われますので、簡素化ができればと思い、 質問させていただきます。 [作りたいマクロ] 『元データ』のフォルダに入っているエクセルファイルの 『指定シート(仮にA2セルにシート名を指定できるものとします)』を、 当マクロの入ったエクセルファイルにシートを追加したい。 その際、全てのシート名が同一になってしまうので、 『指定したセル(仮に各シートのB2セル)』をシート名にする。 ●各シートは全て同じフォーマットですので、書式等そのままコピーでOKです ●元のファイル名はバラバラになっていることが多いです

  • EXCELで複数ファイルのセル抽出マクロ

    EXCELで複数ファイルのセル抽出マクロ いつもお世話になっております。 首題の件ですが、複数のEXCELファイル約100個があるフォルダに入っています。 フォーマットは統一されていますが、記載してあることは別です。 特定のセルの内容を抽出し、別のEXCELブックに保存したいと考えております。 例) パス-D:\集計\ ファイル名-統一されていません シート名-アンケート(統一している) 抽出したいセル-A1:A10とC10:C20(結合されているセルもあります) できれば保存するEXCELブックに抽出したA1の全集計結果をA1に、 抽出したC10の全集計結果をC10に保存したいのです。(1ファイルずつ改行を入れて) マクロを検索して調べてみたのですが、自分の環境に合わせてみるとうまく動かなく、 (単に私の勉強不足ですが・・・)お手上げ状態です。 皆様、宜しくお願いします。 また、厚かましく下記にも別件で質問をしております。 お力添え頂ければ幸いです。 http://okwave.jp/qa/q6170791.html

  • VBAでB列のファイルパスにリンクを貼りたい

    いつもお世話になっております。 特定のフォルダ内にエクセルファイルが毎月増えていくのですが、このフォルダに入っているエクセルファイルのフルパスの一覧を別のエクセルシートのB列に毎月コピペしています。 月10-20のエクセルファイルがリストに追加されていきます。 この増分のパス(B列)にリンクを貼りたいのです。 B列には既に400件以上のファイルパスが入っているので、毎回上からB列の全部のセルにリンクを貼り直すのではなく、増分(B列の最下行+1行目)以下のセルにリンクを張るBVAを教えて頂きたいのです。 当方教えて頂いたコードとマクロの記録の組み合わせがどうにか出来るレベルなので宜しくお願いします。 但し、B列の140行目迄には空白を含むパス以外の文字が入っています。 パスは141行目以降に空白なく入っていきます。

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • エクセル2007で複数ファイル間コピーマクロ

    エクセルでマクロを組もうとしていますが、初歩的なことでつまづいており、ぜひ助けを頂けたらと思います。 VBA言語はほとんどわかりませんが、エクセルでマクロを組んでいます。 一つのワークブック内での登録は問題なく行えるのですが、ワークブック間のコピペをマクロに登録するとうまくいかず困っています。 やりたいことは以下のようなことです。 file.Aのsheet1のA1セル ⇒ file.AAのsheet1のA1セル へコピー file.Bのsheet1のA1セル ⇒ file.BBのsheet1のA1セル へコピー     ・     ・     ・     ・ file.Zのsheet1のA1セル ⇒ file.ZZのsheet1のA1セル へコピー VBAを確認すると、ワークブック名が指定されているため、うまく次のファイルに移行できずにいるようです。 以下が黄色でハイライトされます。 Windows("file.A").Activate 初歩的なことだとは思うのですが、なかなか検索で答えが引っ張りだせないので、A-Zのファイルをコピペできるマクロにするにはどのようにしたら可能なのか教えてください。 よろしくお願いします。

  • 複数のエクセルファイルのデータを新規のファイルで一覧表にまとめるには?

    1つのホルダーの中に1000のエクセルファイルがあり、これらのファイルには、複数のシートがあります。これら1000のファイルから指定するシート(シートの様式とシート名は同じ)のデータ(C5:C17)を一覧表にまとめたいのです。 1000のエクセルファイル名は、○_■(○:個別、■:共通)で、一覧表は新たなエクセルファイルを作成し、1行目は左(A1)から順に、○(ファイル名の個別の部分)、C5のデータ、C6のデータ..C17のデータを  2行目には次のエクセルファイルの○(ファイル名の個別の部分)、C5のデータ、C6のデータ..C17のデータを ・・ と1000ファイルのデータをコピー&ペーストしたく、マクロ作りに挑戦したのですが、うまくいきません。どなたか助けてください。よろしくお願いいたします。

  • 複数のファイルにまたがるマクロについて

    詳しい方、教えて下さい。 あるファイル(Aとします)に、データが入っています。 そのデータを、複数の別ファイル(B,C,Dとします)に一度にコピーできるマクロというのは作成可能でしょうか。具体的には、ファイルAのワークシートに3銘柄の株価データが入っており、それをそれぞれファイルBCDのシート(同じ形式のファイルで、コピーする場所も同じです)に1回のマクロでコピーしたいのです。つまり、BCDのワークシートそれぞれでマクロを作成するのではなく、一発でAからBCDへのコピーができるマクロが可能か知りたいのです。また、そのマクロを動かす時に、BCDファイルを開いていなくともコピーはできるのでしょうか。少しわかりにくい質問かもしれませんが、宜しくお願い致します。

  • Excel VBAマクロで複数のファイルから読み出し

    Excel2002を使用して、以下のような処理を実現しようとしています。 1. ある特定のフォルダに格納されている複数の *.xls ファイルを順番に開く 2. 先頭のシートの特定のセル(例えばA1~D1)の値をコピーして、適当なBOOKのSheet1に上から順に貼り付け、表にする。(最初はA1~D1に貼り付け、次はA2~D2、A3~D4・・・とファイルの数だけ繰り返す) 上記1.の実現方法がよく分かりません。ヘルプを見てもどうも要領を得なくて。 JavaやC,C++のプログラミング経験はあります。 また、VBAマクロも簡単なものなら作成経験があります。 よろしくおねがいします。

  • ファイルパスの汎用性について教えてください!

    ファイルパスの汎用性について教えてください! 一覧表をつくりそこをダブルクリックするとハイパーリンクを設定するマクロを組んだのですが、ファイルパスに汎用性がなく困っています。以下のコードはどう直せばいいですか? Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) Dim h As Range Dim path As String Dim s As String For Each h In Range("M4:V4") If h.Value <> "" Then path = "C:\Documents and Settings\marsh\デスクトップ\特殊\1111\02\01/チェックシート\" s = Dir(path & h & "*.*") ActiveSheet.Hyperlinks.Add Anchor:=h, address:=path & s End If Next h End Sub 上記コードでpathの部分を可変にしたいんです。例えばpath = "C:\Documents and Settings\marsh\デスクトップ\特殊\・・・以降をこのコードが書いてあるエクセルのA1から拾ってくるとかしたいんです。できますでしょうか?よろしくご教授ください。

専門家に質問してみよう