複数のtxtから特定部分を抽出し、一つのxlsファイルにまとめたい

このQ&Aのポイント
  • 複数のtxtファイルから特定の情報を抽出し、一つのxlsファイルにまとめる方法を教えてください。
  • 現在、複数の同じ体裁のtxtファイルを持っています。これらのファイルにはタブで区切られたデータが含まれており、CSVファイルに変換しました。
  • エクセルで開いたCSVファイルには、必要な情報がB601からB802に入っています。これらの情報をまとめたxlsファイルを作成したいです。VBAマクロで解決できる方法を教えてください。
回答を見る
  • ベストアンサー

複数のtxtの特定部分を抽出し、一つのxlsファイルにまとめたいです。

複数のtxtの特定部分を抽出し、一つのxlsファイルにまとめたいです。 皆様のお知恵をお借りできませんでしょうか? 現在約1000行からなる同一体裁のtxtファイルを多数所持しております。 中身はタブで区切ってあったので、タブをコンマに変換し、CSVファイルを作りました。 これらのファイルを15~20ファイルごとにフォルダ分けしてあります。 このCSVファイルをエクセルで開いたところ、 うちB601:B802に必要な情報が入っていました。 この情報を以下のような要領で入力したまとめxlsファイルを作りたいです。 A列 1行目 一つ目のCSVのファイル名(フォルダ内のCSVを名前順で並べたときに1番上のもの) 2行目~203行目 一つ目のCSVのファイルのB601:B802 B列 1行目 2つ目のCSVのファイル名(名前順で2番目のもの) 2行目~203行目 2つ目のCSVのファイルのB601:B802 (以後15~20ファイル分、O~T列まで。20ファイル以上にも対応できると嬉しいです。) このxlsファイルを最低でも20個作る予定です。 VBAマクロできっと出来るはずと思い、昨日9時間ほど調べたのですが、習得には至ってません。 例えば1つのCSVのB601:B802をコピーするマクロは作成できますが、 それをまとめファイルのA2に貼り付け、 まとめファイルのA1にCSVのファイル名を挿入し、 さらに同様の抽出をフォルダ内の別のファイルに連続して行い、 挿入部位が被らないようにまとめファイルB列以降に貼り付けさせることができません。 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv252.htmlhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=359726http://www.excel.studio-kazu.jp/kw/20080428180002.htmlなどを 応用できないか試してみましたが結局よくわからない状態です。 おそらくこちらの説明が不十分で答えにくい質問なのではないかと思いますが、 どなたかお答えいただければ幸いです。 また、勉強してから出直せ!的なことであれば勉強したいとおもいますので、 お勧めの書籍、サイトを教えていただければ幸いです。 どうかよろしくお願いいたします。

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

  • ベストアンサー
  • mo2yakko
  • ベストアンサー率54% (30/55)
回答No.1

処理する順番が決っていないのでしたら DIR関数とループを上手く使えば良いかもです。 (手抜きなサンプルですが) strFileName = Dir("C:\TEMP\*.CSV", vbNormal) i = 0 Do While strFileName <> ""  'ファイル開く(省略 ※エラーなら抜けないとですが)  'コピー(省略)  'ペースト  Sheets("コピー先").range("A2").offset(0,i).pastespecial  i = i + 1  '次のファイル名  strFileName = Dir() Loop 決っていないなら iColumn = .Cells(iRows, .Columns.Count).End(xlToLeft).Column if .Cells(1,iColumn) = "" then  iColumn = iColumn + 1 end if とかでカラム位置を求めるしかないかもです。

oilshift
質問者

お礼

さらにmo2yakkoさんのアドバイスを取り入れた結果、 なんとか狙い通りのマクロを組むことが出来ました! 本当にありがとうございます!

oilshift
質問者

補足

ありがとうございます! 実は質問の後、http://www.moug.net/tech/exvba/0060001.htmを参照して 自分なりに作ってみましたが、動きません。 (エラーもはき出さず、白紙のエクセルのまま。) 正直どこがダメなのか、皆目検討がつきません。 mo2yakkoさんのアドバイスをどのように生かせばよいのかもわかりません。 どなたかご教授願えませんでしょうか? Sub sample()  Dim myPath As String  Dim myFName As String  Dim FCnt As Integer  ThisWorkbook.Activate '使うブックをアクティブに  myPath = ActiveWorkbook.Path 'そのパスを定義  ChDir myPath 'そのパスのフォルダに移動  FCnt = 0 '取得ブック数をカウントするための変数を初期化  myFName = Dir("*.csv") 'Dir関数で最初のファイルを選択  If myFName <> "" Then 'ブックが取得できた場合   FCnt = FCnt + 1 'カウントをプラス   Workbooks.Open Filename:=myFName 'ファイルオープン   Range("B601:B802").Copy '必要部分のコピー   ActiveWorkbook.Close 'データファイルを閉じる   ThisWorkbook.Activate 'まとめブックをアクティブに   Cells(1, FCnt).Value = myFName 'まとめ一行目にファイル名を挿入   Range(Cells(2, FCnt), Cells(6002, FCnt)).PasteSpecial Paste:=xlPasteValues '二行目から値のみ貼り付け(一つのデータ終了)   Do    myFName = Dir("*.xls") 'Dir関数で次のファイルを選択    If myFName <> "" Then 'ブックが取得できた場合    FCnt = FCnt + 1 'カウントをプラス    Workbooks.Open Filename:=myFName 'ファイルオープン    Range("B601:B802").Copy '必要部分のコピー    ActiveWorkbook.Close 'データファイルを閉じる    ThisWorkbook.Activate 'まとめブックをアクティブに    Cells(1, FCnt).Value = myFName 'まとめ一行目にファイル名を挿入    Range(Cells(2, FCnt), Cells(6002, FCnt)).PasteSpecial Paste:=xlPasteValues '二行目から値のみ貼り付け(一つのデータ終了)    Else    Exit Do   End If   Loop  End If End Sub

関連するQ&A

  • フォルダを指定し、複数のエクセルファイルの情報を別ファイルに保存したい。

    エクセルのマクロで以下の実装を行いたいと思っています。 -------------------------------------------------------------- 1.あるフォルダを指定 2.そのフォルダの中に入っているエクセルファイルの特定列複数行(行数不明、データがなくなるまで)の情報を抜き出す 3.2で抜き出した情報を別ファイル(テキスト形式)に保存 -------------------------------------------------------------- ・2で指定するフォルダには複数ファイルがあります ・3で保存するファイル名は2で開いたファイル名と同じ名称にしたい(拡張子は別) フォルダの状態は以下のようになっています。 editor.xls ←マクロを組みたいエクセルファイル L folderA    L A1.xls    L A2.xls    L A3.xls      : L folderB    L B1.xls    L B2.xls    L B3.xls      : L forlerTextfile    L A1.txt ←作りたいファイル    L A2.txt    〃    L A3.txt    L B1.txt    L B2.txt    L B3.txt      : 分かりづらくて申し訳ありませんが、どなたかご教授いただけないでしょうか。 宜しくお願いいたします。

  • 複数のエクセルブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\データ解析\データ」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内のシート(シート名はファイル名と同じ)の「BO6からBW16までの□の範囲」で統一されています。 【抽出一覧作成イメージ】 ・「集計.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元BO6セルの値。以降,C列・D列と 順に値を入れていきたい。 ・BO6~BW16までのセル値を「集計.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • エクセルの各シートに複数のtxtファイルを取り込む

    Excel2013を用いたデータ整理をしているのですが,複数のファイルを扱う上でマクロを用いた効率化をしたいと思い,質問させていただきました. いま,Folder1 というフォルダに,text1 から text40 までの 40個のtxtファイルがあります. これらのファイルを,エクセル上であらかじめ作成してある Sheet1 から Sheet40 にそれぞれ貼り付けたいと考えています. txtファイルは,4列で構成されており,タブでそれぞれ区切られています. 行数は20,481行です. txtの中には,0 の値が入った箇所もあるため,その情報が消えないで貼り付けられると望ましいです. また,タブのところでしっかり区切られ,違うセルに貼り付けられると,ありがたいです. 質問は以上です. お手数ですが,よろしくお願いします.

  • このようなエクセルマクロを組みたいのですが...

    下記のようなマクロを組みたいと思っていますが、 知見がほとんどないので教えていただきたいと思います。 "csv"というフォルダにランダムなファイル名でcsv形式のファイルが100以上保存されています。 目的は、 そのcsvファイル内の一部のデータをひとつのファイル(ファイル名を"まとめ"とします)に移して並べたいと思います。 <前提> "csv"フォルダと"まとめ"ファイルは既に開かれている状態とします。 "まとめ"ファイルを開いた状態で、マクロを走らせると、 (1)csvファイルが開く (2)セルA1とB1をコピー (3)"まとめ"ファイルのA1、A2へ貼り付け(行と列を変更) (4)csvファイルを閉じる (5)次のcsvファイルが開く (6)セルA1とB1をコピー (7)"まとめ"ファイルのB1、B2へ貼り付け(行と列を変更) (8)csvファイルを閉じる 以降、"csv"フォルダの中身をすべて処理できるまで繰り返し。 という風に考えていますが、 当方あまり知識が無くアレンジが難しいためできる限りシンプルにと考えています。 そのため、もしこうした方が...等あればアドバイスいただけるとありがたいです。 すみませんがよろしくお願いいたします。

  • 同一フォルダ内の複数ブックの特定の行を抽出し一覧

    あるフォルダにCSVファイルをエクセルに変換したファイルが大量にあります(60ファイルほど)。 ファイルを開くと同一形式で1行目には項目が入っており、2行目以下にデータが入っています。 マクロを実行することで、特定の列に数値が入力されている行だけを抽出し、一欄表の形に したいと思います。 イメージは次のとおりで、例はD列に入っているパターンです。 出来ればメッセージボックスで列を指定できれば夢のようです。 [あるエクセルファイル]      A     B     C     D 1   100     1      2   100     1     1 3   100     1     2 4   100     1     3   300 [別のエクセルファイル]      A     B     C     D 1   200     1      2   200     1     1 3   200     1     2 4   200     1     3   200 マクロを実行するとメッセージボックスが出てきて、例えば4列目とかD列とか 指定をすると次のとおり一覧表ができる。      A     B     C     D 1   100     1     3   300 2   200     1     3   200 初心者でどうにもならず、お力を借りるしだいです。 どうぞよろしくお願いいたします。

  • EXCELで複数のファイルから抽出

    Excelのことで困っています。 何かいい方法があれば教えてください。 同じフォームのエクセルファイルが約1000ファイルあり、それぞれのファイルの例えば3~5行目だけを抽出し、別のの新しいファイルにどんどん貼り付けて3~5行目だけを集めたファイルを作りたいのですが、ファイルの数が多いので、全ファイルを開いてコピペする以外にマクロか何かを使って自動で抽出できるような方法がないかと考えております。 1000個のファイル名は今はばらばらですが、必要であれば0001.xls~1000.xlsなどに変更してもよいです。 どうぞよろしくお願いします。

  • TXTファイルからExcelへ指定行を抽出

    OffceXPを使用しております。 表題の通りなのですが、テキストファイル内のデータから指定した行をExcelのファイルへ抽出する方法を教えて下さい。 (ファイルは「.TXT」形式と「.CSV」形式の2種類が用意できます。) 当初はファイル名の一覧行を作り 「='ドライブ名:\フォルダ名\[ファイル名.csv]シート名'!$A$1」 の式を用いて表を作成しようとしたのですが、この方法ではファイルを全部開き値を更新しないとエラーが出てしまいました。 ファイルは200以上有り、1つ1つを開いてデータを引っ張るには無理があります。 フリーソフトを探してみましたが、指定文字を含む行を抽出するソフトは数多くあったのですが、 「指定行」というのが見つからず、お手上げです。 関数や数式・VBAもしくはフリーソフト等、簡易にデータ抽出が出来れば何でも結構です。 但し、VBAに関しては殆ど知識が無いので、解り易く書いて頂けると幸いです。 欲を言えば、ファイル名も同時に抽出出来ればあり難いですが、こちらはさほどこだわりません。 良い方法をご存知な方がいらっしゃればどうかご教示下さいませ。 宜しくお願い致します。

  • エクセル:複数ブックをマクロを使い同一条件で集約・抽出したい

    教えて下さい 複数のエクセルブックがあります(全て1フォルダーに集約してある) それぞれA列に日付、B列に金額が入っている 複数あるブックを指定する日付で次から次へと検索しその金額とファイル名を新しいブックに縦に全てコピー(抽出)したい ちなみに、必ず条件にあうデータがそれぞれのブックにあるとは限りません 無い場合もあります 無い場合は特に抽出する必要はありません ========================================================= 例:2007/12のデータを抽出したい ★抽出結果イメージ    A      B    C 1 2007/12   200   ああああ.xls 2 2007/12   300   いいいい.xls 3 2007/12   100   うううう.xls 4   ・      ・      ・ 5   ・      ・      ・ 6   ・      ・      ・ 7   ・      ・      ・ ========================================================= このような場合、マクロでできますか?マクロは初心者です 教えてください よろしくお願いします 複数あるブックとは数的に60とかあります ちなみに現状はファイルを一つ一つ開き、指定日付を検索し見つけだし その行をコピーペーストしています たくさんブックがあるので、これをしていると目がチカチカしてきてしまいます この作業がマクロでできると、すごく感激なのですが・・・ どなたか、お知恵・お力をおかしくださいませ

  • 複数CSVファイルからデータ抽出

    CSVファイルのA列(行は問いません)の文字が転記シートのA列(行は問いません)と一致していたら、転記シートのA列が一致した行の空白に、左から順にCSVファイルのA列が一致した行のF列の値を書き込む。CSVファイルの1行A列を転記シートのF列の値を書き込んだ列の1行目に書き込む。 できれば、書き込んだ値はCSVファイルから消したいです。 コピペでやっていたのですが、ずれていてどうしようもなくなりました。 CSVファイル一つ当たり、4000行ほどあり、ファイルは200弱あります。 プログラムを組んでくださると、ありがたいのですが。 質問というよりお願いになってしまいますが、よろしくお願いします。

  • PHPで複数のテキストファイルを読み込みたい

    PHPを勉強中です。 どうしても自力で解決できないので助けてください。 やりたい事は、 「複数ファイルの内容を読み込み、  それらのデータをcsvのセルに入れたい。」のです。 Aというフォルダに、複数のテキストファイルがあります。 これら各ファイルの内容をそれぞれ取得して 「○○.csv」のB列に上から順々に書き込んでいきたいのです。 Aフォルダに入っているテキストファイルは連番を想定しています。 A/ 0001.txt 0002.txt 0003.txt : フォルダに入っているテキストファイルの数はいろいろです。 3枚のフォルダもあれば100枚のフォルダもあります。 これらのファイルの内容を、それぞれ取得して 用意されているcsvファイルの特定のセルに テキストファイルの数だけ順番に入れていきたいのです。 ○○.csv A列  |  B列  |  C列  | △  |0001.txt内容|  △  | △  |0002.txt内容|  △  | △  |0003.txt内容|  △  | : : プログラムのヒントを教えていただければ嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう