• ベストアンサー

エクセル複数ファイルを一つのシートに…

エクセルのsheet1に縦に800個ほどのデータが並んでおります。それらのデータファイルが40個ほど一つのフォルダに保存されています。それらのデータを一つのエクセルのシートにまとめたいのですがどうしたらよいでしょうか?例えばA列にはブック1のデータB列にはブック2のデータというようにしたいのですが…

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

  • ベストアンサー
回答No.4

別の質問で、行ごとに合成するVBAを紹介しましたので、それを1列ごとに合成するようになおしました。 '条件:(1)任意のフォルダの中に、合成したいすべてのエクセルファイルを入れる。各ファイルの名前は異なっていること。 '   (2)各エクセルファイルの中の「練習」シートの1列目に同じ形式でデータが入れてあるとする。 '   (3)集計は「Main.xls」の「練習」シートに順にくっつけていく。 '   (4)コード中の「シート名」は自由に変更してください。 '   (5)Main.xlsについては、シートが2つ「search」「練習」が必要です。「search」シートはフォルダの '    場所と、その中のファイルの名前を取得して一覧にしています。その後、そのファイル名を使って '    「練習」シートに各ファイルの「練習」シートのデータを合成しました。 '   (6)このコードは、「ツール」「マクロ」「VisualBasicEditor」でエディター画面を開き、 '    「挿入」「Module1」の所にはりつけ,エクセル画面で「ツール」「マクロ」「マクロ」 '    「FileSearchの実行」で動かす。 Sub FileSearch(): 'ファイル検索 Dim sfolda As String Dim SName As String Dim i, j, k, n As Integer Dim ww As String Dim L, S As Integer Dim ws As Object Dim DName As String Dim PP, FF As String Dim MaxG, DKoumoku, DLine As Integer Dim MaxFileSu As Integer '各値初期設定 MaxFileSu = 100: '最大ファイル数 DName = "練習": 'シート名 MaxG = 1000: '最大検索行数 DLine = 1: 'データ入力行数カウント Application.ScreenUpdating = False '現在のフォルダのパスを設定 sfolda = ThisWorkbook.Path 'ファイル名を入れるシートをセットおよび初期化 Set ws = Workbooks("Main.xls").Worksheets("search") ws.Range("B1").ClearContents ws.Range("A4:B200").ClearContents ws.Cells(1, 2).Value = sfolda '各ファイル名を検索しsearchシートに登録 SName = "*.xls" n = 1 With Application.FileSearch .LookIn = sfolda .Filename = SName rs1 = .Execute If rs1 = 0 Then Exit Sub For Each nm In .FoundFiles ww = nm S = 1 While S > 0 S = InStr(1, ww, "\", 1) L = Len(ww) ww = Right(ww, L - S) Wend If ww <> "Main.xls" Then ws.Cells(n + 3, 1).Value = n: '1列目に番号セット ws.Cells(n + 3, 2).Value = ww: '2列目にファイル名セット n = n + 1 End If Next nm End With '====================================================================== '合成処理 For n = 1 To MaxFileSu 'ファイル名をセット PP = ws.Cells(1, 2).Value If ws.Cells(n + 3, 2).Value = "" Then Exit For FF = ws.Cells(n + 3, 2).Value PP = PP & "\" & FF 'ファイルオープン Workbooks.Open (PP) '各シートからデータをMainに追加貼り付け For i = 1 To MaxG If Workbooks(FF).Worksheets(DName).Cells(i, 1).Value = "" Then Exit For Else Workbooks("Main.xls").Worksheets(DName).Cells(i, DLine).Value = Workbooks(FF).Worksheets(DName).Cells(i, 1).Value End If Next i DLine = DLine + 1 'ファイルクローズ Workbooks(FF).Close Next n End Sub

kita5626
質問者

お礼

コードまで書いていただきありがとうございます。 これで完璧に出来ます!!!

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

INDIRECT 関数ですが、昨日も、ここのカテゴリで書きましたが、INDIRECT 関数はブックを開かないと取れませんが、INDEX 関数は、ブックを開かずに、値を取得できます。 =INDEX('ブックのパス\[ブック名.xls]シート名'!範囲,行,列) それを、値が取得できた時点で、コピー・値貼り付けしてしまえば、ブックのリンクの負担がなくなります。 それから、専門的になりますが、マクロの場合のお話をさせていただきます。 マクロの場合は、本当に、開かないでインポートすると、私のイメージでは、逆に遅くなりますね。しかし、値をインポートする場合は、オートメーション・オブジェクトといって、メモリ上の中に、Excelを開いて(見えるようにも、見えないままでもできます)で、値を取得する方法があります。 マクロの場合は、それよりも、ブック名には一定の基準があるのかとか、Sheet1 の800個のデータの位置とか、きちんとしたルールがあるか、どうかのほうが問題でしょうね。

kita5626
質問者

お礼

回答ありがとうございます。確かにindexを使うとできますね。しかし、ブックリンクを解除するのに値を貼り付けをしなければならないのが私の中で問題でしたw。ブック名に一定の基準があり800個のデータの位置も一定の基準んになっていますのでマクロでやろうと思います。丁寧な回答本当にありがとうございました。

  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.2

「Book1~Book40」の「Sheet1」の「A1~A800」にデータが入力されているとして、 それを「Book0」の「Sheet1」の「A1~AN800」に表示させる場合、 「Book0」の「Sheet1」の「A1」に =INDIRECT("[Book"&COLUMN()&".xls]Sheet1!A"&ROW()) と入力して、行・列方向にコピーして下さい。一覧で表示されるようになると思います。 その際、 COLUMN()はそのセルの列番号、ROW()はそのセルの行番号ですから、例えば 「Book0」がB列(2列目)から、元データがA列(1列目)から始まる場合は「COLUMN()」を「COLUMN()-1」 とするなどして、参照セルが正しくなるように調整して下さい(ROW()の場合も同じ) また元データの列番号がA以外の場合 Sheet1!A"&ROW() の「A」を変更することをお忘れなく。 なお、元データに空白セルがある場合、上記の式では「0」が表示されますので、それを避けたければ、 ・ツール→オプションの「表示」タブで「ゼロ値」のチェックを外すか、 ・式を =IF(INDIRECT("[Book"&COLUMN()&".xls]Sheet1!A"&ROW())="","",INDIRECT("[Book"&COLUMN()&".xls]Sheet1!A"&ROW())) とするなどして下さい。

kita5626
質問者

補足

本当にすいません。この方法だとやはりファイルを開いていないとダメですよね。値だけをBook0に持ってきたいのですがこれをするにはやはりマクロか何かを使わなければならないのでしょうか

noname#11074
noname#11074
回答No.1

Book1のSheet1のA1セルを参照する方法 =[Book1]Sheet1!$A$1 でセル参照すればよいのではないでしょうか。 今回は同一フォルダ内のようですが、 フォルダが異なる場合、 'パス名[ブック名]シート名'!セル名 とすればよいと思います。

kita5626
質問者

お礼

回答ありがとうございます。u1skwさんのおっしゃる通りなのですが,何しろファイルが多量にあるもので出来ればBook1~Book40は開かないで出来る方法をと考えております。説明が足りなくてすいません

関連するQ&A

  • 複数のシートを持つ2つのエクセルファイルを単純に結合したい

    ファイルとして保存してあるエクセルのブックファイルAには10のシートが含まれており、同様のブックファイルBと結合して、20のシートが含まれるブックファイルCを作りたいのですが、エクセルを開いて対話形式で実行するのではなく、バッチファイルに引数としてファイルA・B・Cを渡して実行するなどの方法を探しております。 ご教示いただけると大変助かります。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • Excelで複数のテキストファイルを1枚のシートに

    Excelで複数のテキストファイルを1枚のシートに追加したいのですが可能でしょうか? VBAや別ソフトを複数使ってもかまいません。 2列のテキストファイルが複数ありA列目は共通でB列目がそれぞれ異なります。 data01.txt、data02.txt…と50ぐらいのファイルがあり、それぞれ A  B 10 1.24 20 2.56 30 2.46 :  : となっています。これをひとまとめにして A      B     C ・・・ data01  data02   data03・・・ data50 10     1.24    1.35 ・・・ 2.24 20     2.56    2.22 ・・・ 1.34 30     2.46    3.23 ・・・ 5.45 :       :      : といった表にしたいのです。 お願いします。

  • エクセル 全部のシートを自動的に読み込みたい

    どなたが助けてください。 エクセルのファイルが一つのフォルダの中に 沢山あります。(CSVの場合もあります) 各ファイルには複数のシートが入っていて シート名はバラバラです。 各シートのに入っているデータは 縦は500行目まで、横は端から端まで(A列→IV列)です。 この沢山のエクセルファイルの全シートを 一つのシートに自動的に読み込んで 縦てに並べたいのです。 1ファイルの中にある全シート(1枚しかシートがない ものもあれば5枚あるものもあり もれなく全部) の500行目までを 別の新しいエクセルファイルのシートに縦に並べて 次のファイルをまた開いて全シートを 先ほど並べたデータの下にまた並べて・・・・と 繰り返して一つのフォルダの中にあるエクセルファイルの全シート重複せずに並べるような マクロをどなたか教えて頂けないでしょうか? ファイル数が大変多く、本当に困っています。 よろしくお願いいたします。

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

    エクセルでのデータ整理の件で以下の質問があります。 以下のことができるようなマクロは組めませんでしょうか? 同一フォルダ(仮に、「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行内に各ファイルのデータが入力されている、 といった風にしたいと考えています。) 参考になりそうな過去の回答もありましたので、いくつか試してみたものの、 うまくいきませんでした(私はマクロは少しかじった程度です)。 一個ずつコピペでは非常に骨が折れ、難儀しております。 ややこしい質問ではございますが、ご回答お待ちしております。

  • Excelで複数のシートの結合の仕方を教えて下さい

    複数(30)のブックにa、b、c・・・というシートがあり、a、b、c・・・シートはA列から始まっていて、A列に列見出しがあり、同じ列には同じ種類のデータが入力されている時に、複数のブックの各aシートを、新しく作ったブック31のyシートに結合するVBAを教えて下さい!!! よろしくお願いします!!

  • 複数のExcelを1つのExcelに

    Excel.xlsの1シート目に、フィールドとデータが入っています。このExcelが担当者ごと複数存在します。 複数のExcelを1フォルダにまとめ、1行目はフィールド・あとは全てデータとして、1つのExcelブックの1シートへまとめることは可能でしょうか? フィールドは38列、行数はブックごと異なり、ブック名も担当者ごと異なります。 いろいろ調べたのですが、VBA初心者の為、VBAを貼り付けて実行してもうまくいきませんでした。 できれば、元ファイルは消さないよう、コピーのみ行いたいと思っています。 フォルダ名は C:\出庫依頼書 です。 どなたかご教授いただけませんでしょうか。

  • エクセルで複数ファイルのシートから一つのシートへ結合したい

    エクセル上で、 Aフォルダ内にファイルBook1~数十個があり、Book1にはシート名「sh1」、Book2にはシート名「st2」のみがぞれぞれあります。シート内のデータ数はバラバラで何行のデータがあるか不明ですが、列数は同一です。 このファイルすべてを開かずに、今開いている、「加工.xls」のsheet1にまとめたいと思っています。(sh1の下にsh2、その下にsh3・・・を繰り返して、「加工.xls」のsheet1に貼り付ける。行間は空けず一覧表にする。フォルダ内のファイルが無くなったら終了する。)こんな感じのをマクロでやりたいと思っています。 ファイルを開かないで行う方法は、何とか過去の質問を調べてApplication.ExecuteExcel4Macroを使ってやろうとしていますが、応用が利きませんでした。開いていないファイルの最終行をどう取得選択してsheet1に持ってくればよいか分からず悩んでいます。 よろしくお願いいたします。

  • エクセル 複数シートのデータをまとめたい

    他の質問を参照したのですが、できないのでお願いします。 新しいシート(ブックでもいいです)に次のデータを ひとまとめにしたい。 外国語テストのデータです。 (1)ひとつのブックにシートが十枚ある (2)列a2~h2 行2~29までデータがある。 (3)列a番号(a2が1、a29が28)  列b空欄  列c日本語  列d外国語 この構造を倍にしているのでa~hにデータが並んでいる。 これを、 つまり、8×28のデータが各シートにあるわけですが 【ひとつ】 できればシート1のデータの下 29行目からシート2のデータ、58行目からシート3… というように並べたい。 【ふたつ】 更にできるならa~dの下にe~hを持ってきて 4×56の並びにして 57行目からシート2のデータ…というように並べたい。 データの並びは列a列eの番号順を保持できたらうれしいです。 どうぞよろしくお願い致します。

  • フォルダに入っている複数のファイルをコピーしたい。

    エクセルなのですが、 1つのフォルダに入っている複数のエクセルファイルを 1つのエクセルファイルに(下に付け加えて)まとめたいと思っています。 このようなことをやりたいと思っているのですが、 お力をお貸ししていただけないでしょうか? どのシートも形式は同じなのですが、 1つのエクセルファイルに複数のBookがある場合もあります。 中身としてはA~Z列まであり、また行についてはそれぞれのシートによって異なります。 そして、どのシートに対しても1~3行についてはタイトル等が書いてありますので、 4行目以降でデータが入っているところまで、同じフォルダに用意したファイルに 順番にコピーしていきたいと思っています。 色々と試してみたのですが、どうしても複数のファイルから取り出してくることができなくて、 すみませんがよろしくお願します。

専門家に質問してみよう