• ベストアンサー

ディレクトリ内にある複数のエクセルファイルデータを抽出したいです。

ディレクトリ内にある複数のエクセルファイルデータを抽出したいです。 ディレクトリ内にある複数のエクセルファイルがあります。 各ファイルのSheet1の列Aと列Bと列Cと列Gと列Hのデータをインポートして1つのエクセルファイルにエクスポートしたいと考えています。 こういうことをマクロで実現することはできますでしょうか。

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

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.4

>2行目以降の列でデータがるものをすべて  Range([A1], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")  Range([G1], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D") を以下のように変更します  Range([A2], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")  Range([G2], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D") ただし、2行目以降に全くデータがないときには1行目をコピーしてしまいます。 そこで、IF文を使って2行目以降にデータがあるときだけコピーするようにします。  If MotoDataLastRow > 1 Then   Range([A2], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")   Range([G2], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")  End If

MEGUMI19800214
質問者

お礼

本当に何から何までありがとざいました。 頂いた内容でまったく問題なくできました。 親切にご指導下さりまして本当にありがとうございました。

その他の回答 (3)

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.3

>でも、うまく動きませんでした。 私のサンプルに一部間違いがありました。申し訳ありません。 また、MEGUMI19800214さんが作成した部分にも不足があります。 それらを含めて、回答します。 まず、私が間違えた点です。 最初のDir関数は、以下の様にフォルダ名を指定する必要があります。  XlFile = Dir(ThisWorkbook.Path & "\*.xls?") ThisWorkbook.Pathでマクロのあるブックのフォルダ名が取得できます xlsの後ろに「?」を付けたのは、バージョン2007以降で拡張子がxlsxになったことへの対応です。 ExcelマクロからExcelファイルを開くには  Workbooks.Open ファイル名 を使います。このとき、新しく開いたブックが「アクティブ」になります。 Worksheets(1)以外が選択されている場合に備えて、ブックを開いたらWorksheets(1)を選択します。 また、2つのブックの間でコピーするので、どちらのブックを対象にしているのかを指示します。 >[A65536].end(xlup)も試してみたのですが、A,B,C,G,H列で使用する場合、  [A65536:H65536].End(xlUp) でA~H列の最終の行が分かります。 以下がサンプルです。 Sub sumple()  Dim XlFile As String  Dim MotoDataLastRow As Long  Dim CopySakiLastRow As Long    ThisWorkbook.Activate  Worksheets(1).Select  Cells.Clear    XlFile = Dir(ThisWorkbook.Path & "\*.xls?")  Do While XlFile <> ""   If XlFile <> ThisWorkbook.Name Then    Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True    Worksheets(1).Select    MotoDataLastRow = Workbooks(XlFile).Worksheets(1).[A65536:H65536].End(xlUp).Row '元データファイルの最終行を取得    CopySakiLastRow = ThisWorkbook.Worksheets(1).[A65536:E65536].End(xlUp).Row 'インポート先の最終行を取得    Range([A1], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")    Range([G1], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")    Workbooks(XlFile).Close False   End If   XlFile = Dir()  Loop   End Sub

MEGUMI19800214
質問者

お礼

本当にありがとうございます! 大成功でした。 恐縮なのですが、コピー範囲を指定するときに  2行目以降の列でデータがるものをすべて とする場合、 [A65536:H65536] に何を付け足せば上記の命令になるのでしょうか? めぐ

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

こんばんは >こういうことをマクロで実現することはできますでしょうか できます。 こう回答しますと「サンプルをください」と言いたい気持ちにはなるでしょうが、 実際に使うプログラムとなるとこのサイトでは限界があると思います。 MEGUMI19800214さんが勉強されるか、出来る人に依頼するかしかないと思います。 >ディレクトリ内にある複数のエクセルファイルデータ 同じフォルダ内にあるエクセルファイルをすべて対象にするならば Dir関数が利用できます。 Sub sumple()  Dim XlFile As String    ThisWorkbook.Activate  Worksheets(1).Select  Cells.Clear    XlFile = Dir("*.xls")  Do While XlFile <> ""   If XlFile <> ThisWorkbook.Name Then    'ここに、対象のエクセルファイルを開きコピーするプログラムを記述   End If   XlFile = Dir()  Loop   End Sub コピー先のセルの最終行を取得するには [A65536].end(xlup) が便利です(A列は必ず値が入っており、空欄はないと想定しています)。 マクロからエクセルファイルを開いたり閉じた出来ますが、対象のファイルが既に開いていたらどうする?などの処理も必要です。

MEGUMI19800214
質問者

お礼

rukukuさま 分かりやすいご連絡を頂きまして本当にありがとうございます! 私はマクロについては本当にかじった程度なのですが、 マクロの記録を使ってみて、rukukuさまのアドバイスを参考に下記のマクロを作ってみました。 でも、うまく動きませんでした。 [A65536].end(xlup)も試してみたのですが、A,B,C,G,H列で使用する場合、 [A65536].end(xlup) [B65536].end(xlup) [C65536].end(xlup) [G65536].end(xlup) [H65536].end(xlup) とするのでしょうか? お忙しいところ大変恐れ入りますがもしお時間ありあしたら返信を頂ければ助かります。 宜しくお願い致します。 Sub 今月の整理() Dim XlFile As String ThisWorkbook.Activate Worksheets(1).Select Cells.Clear XlFile = Dir("*.xls") Do While XlFile <> "" If XlFile <> ThisWorkbook.Name Then Range("A2:C8,G2:H8").Select Range("G2").Activate Selection.Copy ActiveSheet.Paste Range("A9").Select Application.CutCopyMode = False ActiveWorkbook.Save End If XlFile = Dir() Loop End Sub

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

まずマクロの記録で1つのファイルを対象に 上記操作のマクロを作成してみましょう。 その後複数ファイルが対象になるように 改良していくのがよいかと思います。

関連するQ&A

  • 複数のエクセルファイルとシートからデータ抽出したい

    すみませんが教えてください! 複数のエクセルファイルがあり、それぞれに複数のシートがあります。 (ファイルによってシート数は異なります) そのすべてのファイル/シートから、C列の最後の行のデータを抽出し、集計ファイルに書き出したいのです。 書き出しのフォーマットは3セル使用して、ファイル名、シート名、データとしたいです。 すみませんが、よろしくお願いいたします。

  • エクセル 複数条件抽出について

    エクセル2013を使用しています。 データシートより複数条件に当てはまるデータを 別のシートへ必要な項目のみ抽出する方法(関数orマクロ)をお教え下さい。 データシート:A列からU列まで様々なデータが入力されている。 抽出条件:H列とN列 抽出する項目:C列・I列・M列・O列・Q列・R列・S列 (抽出する項目は増える可能性有) 複数条件の抽出はフィルタオプションで出来たのですが、 抽出が必要な項目を指定する方法が分かりませんでした。 宜しくお願いします。

  • Excelでの複数データ抽出方法

    Excelで関数を使用して以下のようなデータから 複数のデータ抽出を行いたいのですが可能でしょうか? <sheet1> A列 B列 C列 D列     E列 123456 11 12 13    13 123457 12 13 14    13、14 123158 13 14 15    13,14 123159 14 15 16    14  123160 15 16 17 ※抽出するデータは「13・14」になり、抽出場所は別シートでもかまいません。 過去の質問など参照してみましたがうまく出来ませんでした。 複数の関数を組み合わせでもかまいませんので、お手数おかけしますが よい方法が有ればご教示お願いします。

  • 複数のエクセルファイルからデータ抽出とまとめる

    集約一覧表と同じ場所にある複数のサブフォルダ全てにある全てのエクセルブックからデータを抽出して集約一覧表に表示させたいのですが、どのようにマクロを組めばいいのかわかりません。 抽出するデータは B1、B3、B7、B9 です。これを集約一覧の2行目から順番に各行に各エクセルブックの抽出データをB1をA列、B3をB列、B7をC列、B9をD列に表示させできることならE列に各ブックへのハイパーリンクを自動で貼るマクロを作りたいと思っています。 更に今後、集約一覧をフォルダごと移動することも考えて絶対パスを自動で取得できるようにもしたいです。 初心者の為、いろいろエクセルのガイドブックやいろんなサイトの似たような質問をたどってみましたがよく理解できず困っています。どなたかご教示いただけませんでしょうか?

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • 複数のエクセルファイルからのデータの抽出、一覧の作成について

    エクセルでのデータ整理の件で以下の質問があります。 以下のことができるようなマクロは組めませんでしょうか? 同一フォルダ(仮に、「C:\Sample」とします)に日々の業務データが 入力されたエクセルファイルが300個ほどあります。 各ファイル内にはSheetが5枚あり、各ファイルで入力されているデータは すべて同一のフォーマットです(Sheet毎では異なる。 例えば、Sheet1の1行A列には日付データ、Sheet2の2-5行B列には名前データ、といった感じです)。 これら300個のファイルから、これまでのデータを一覧にしたリストを 新規に作りたいと考えています(作成場所はどこでも構いません)。 例えばSheet1の、1列目にはファイル名、2列目には各ファイルSheet1の1行A列の日付データ、 3-6列目には各ファイルSheet2の2-5行B列の名前データ・・・、といった具合です。 (縦に日付が並び、1行内に各ファイルのデータが入力されている、 といった風にしたいと考えています。) 参考になりそうな過去の回答もありましたので、いくつか試してみたものの、 うまくいきませんでした(私はマクロは少しかじった程度です)。 一個ずつコピペでは非常に骨が折れ、難儀しております。 ややこしい質問ではございますが、ご回答お待ちしております。

  • エクセル 複数データ 抽出

    エクセルの複数データの抽出で困っています。 助けてください。 以下の様なシートで別シートから複数のデータを取り出したいのですが・・・・ 他の方の質問を参照したのですがうまく行かなく 皆さんの知識を教えてください。 シート1  テーブル A列     B列    C列   D列 グループ  メーカ   部品  数量  1      A社    AAA   1  1      B社    BBB   2  1      C社    CCC   4  2      F社    ZZZ   3  2      S社    HHH   2  3      以下も同様  3  4  5  5  5 シート2 摘出を考えているのですが シート1のA列グループを選択すると全て摘出する様にしたいです。 シート2 グループ選択 「1」 「2」 を選択すると 1と2が全て摘出される  1      A社    AAA   1  1      B社    BBB   2  1      C社    CCC   4  2      F社    ZZZ   3  2      S社    HHH   2 選択は1と3 2と4 1と5 とか結構なパターンがあります。 VLOOKUP、その他の方の回答例も使用してみましたがうまく出来ませんでした。 関数、マクロ問いませんので どうぞ、お力をお貸し願います。

  • エクセル:複数シートで重複データを抽出したい

    こちらで、ひとつのシート内での重複データの抽出はできました。 ↓ http://www12.ocn.ne.jp/~momonet/excel-temp41.htm これを応用し、複数のシートの列内の重複を抽出することはできますか? シート1のA列とシート2のC列というように、同じ列ではないこともあります。 よろしくお願いします。

  • エクセルで条件に合わせて複数データを抽出したい

    シート1に基本データ(基データ)があり、シート2のセル内に条件を入れて、該当のデータをシート1から引っ張りたい。 具体的には、シート1に基本データ  ナンバ- 1 1 2 2 2 3 4 4 4  該当データ A B C D E F G H I シート2に 条件内容 1を入れてA B (複数データ)      2を入れてC D E       3を入れてF -----と、こんな具合になりたいのですが?   VLOOKUP は複数の抽出なので駄目でした。   

  • Excelでのデータ抽出

    Excelで外部結合風のデータ抽出を教えてください。 シートAとシートBに表形式のデータがあり、 シートAのA列の値とシートBのA列の値が一致するシートBの 行を抽出するのが目的です。 具体的には次のような感じです。 シートA         シートB ----------------  ---------------- A列 | B列 | C列     A列 | B列 | C列 ----------------  ---------------- 2  | 2B  | 2C      1  | 1BB | 1CC ----------------  ---------------- 4  | 4B  | 4C      2  | 2BB | 2CC ----------------  ---------------- 6  | 6B  | 6C      3  | 3BB | 3CC ----------------  ---------------- ↓ シートB ---------------- A列 | B列 | C列 ---------------- 2  | 2BB | 2CC ---------------- 以下以外の方法がありましたら教えてください。 1)アクセスに両シートのデータを取り込み、2つのテーブルを外部結合で連結させる。 2)マクロで二重ループをつくり、A列が一致した行を取り出す。 よろしくお願いします。

専門家に質問してみよう