• 締切済み

大量のテキストファイルを一つのエクセルファイルに

大量のテキストファイル(以下「テキスト」とします)を、そのテキストを保存しているフォルダ名がわかるように一つのエクセルファイルに書き込みたいと考えています。 例えば「A」というフォルダの中にフォルダ名「1」~「1000」の1000個のサブフォルダがあり、その1000個のフォルダの中にはそれぞれ3~4つのファイルが保存されています(ファイルの種類はバラバラ)。但し、1000個のフォルダには最低でも1つのテキストが必ず保存されており、そのテキストのファイル名はすべて同じです。これら同じファイル名の1000個のテキストを、保存されているフォルダ名がわかるように一つのエクセルファイルの一つのシートの上から順番に書き込みたいのです。 それぞれのテキストは、1行に1情報、改行が10~20ほど、ファイルサイズは1~2KBほどです。エクセルのバージョンは2010です。 書き込み方は、例えばエクセルファイルのSheet1のA列にフォルダパス等のフォルダ名がわかる情報を、B列にテキストの内容を書き込むといった感じで、簡単なデータベースのテーブルを作るイメージです。 上記を実現できる方法はありますでしょうか? もし何らかのプログラミングが必要であれば、当方ほぼ未経験ですので具体的に例示して頂けると大変ありがたいです。 よろしくお願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

ファイル数が少し多いので、手作業ではいやになるだろう。 >何らかのプログラミングが必要であれば 質問にぴったりの(市販、出来合いの)ソフトはないから、プログラムを使わざるを得ないだろう。 ーー それにプログラムでやるにしても、下記のステップを踏んでやることになるのではないか。 質問者は、VBAやVBScriptを使ったの経験がないらしいので、できないだろう。 あきらめることだ。ファイルやフォルダをたくさん作ると困難が待ち受けている。 (1)Aの下のフォルダ名をエクセルシートに出す     Aに直接ぶら下がるファイルはあるのか、ないものとしてよいか。 http://officetanaka.net/excel/vba/tips/tips95.htm Dir関数でサブフォルダを取得する。 ーー (注) VB系では (A)VBのDIRを使う方法 (B)VBScriptを使う方法がある。 ーー (2)その表を基に、その各フォルダ(Aからは実はサブフォルダ)の中のファイル名をエクセルシートの各行に打ち出す。    テキストファイル以外はないのか。テキストファイル以外はスキップするのか。 http://officetanaka.net/excel/vba/file/file07.htm ファイルの一覧を取得する (3)フルパス名+対象ファイル名がシートに出来上がれば、そのファイル名を含む、フルパスをシート名からとって 、ファイル名によって次の段階でオープンする。   以上は実情把握と準備段階である。 ーー  いよいよファイルをオープンして中身を見る段階。 もちろん1ファイルの作業が終わればファイルクローズ。 (4)ファイルをオープンする。 エクセルの「区切り位置」の機能を使って同行の複数セルに位置付けることができる場合もあろう。 http://officetanaka.net/excel/vba/file/file08b.htm のsample2 ほかにLineInputで1レコードごと読み込んで、SPLIT関数で項目に(各セル用に)分離する方法もある。 ーーー  最終的に望みのものに編集する。 (5)セルデータを編集する必要がないか。あればどう編集するか。 >それぞれのテキストは、1行に1情報、改行が10~20ほど、ファイルサイズは1~2KBほどです がどういう状態かわかりづらいし、プログラムで対処を取れるかどうか。 ーー >当方ほぼ未経験ですので具体的に例示して 全部丸投げで、このコーナーの趣旨に反する。プログラムの下請けに応じるコーナーではないはず。 WEBには質問の部分部分になら似たケースで近いコード例は見つかると思う。有名な処理タイプと思う。 興味とやる気があれば、まず調べまくることかな。 しかし、まったくプログラム未経験では説明しきれない。   ーーー またコンピュター界は、UNIX、Linux系のこと(経験者)と、MsのOffice系の考えとあるので 注意すること。 エクセルのシートに出したいということなので、ややMsのOffice系の処理(VBAなど)が近いのかなと思う 次第です。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

ご相談に具体的に書かれていない点としては「Aフォルダ」が具体的にどこにあるのかと,「テキストファイル」が具体的にどんな拡張子がくっついたファイルなのか,それから「1つのテキストファイルには10~20行ぐらい情報がある」のをエクセル上に具体的にどんな具合に展開したいのか不明,の3点ですね。 「全部一緒なテキストのファイル名」も具体的なファイル名が不明ですが,いずれにしても拡張子の情報は必須です。 そういう情報提供が無いと,回答者は勝手に想像で間違った回答をしちゃうかもしれませんし,自称シロートさんのご相談者さんも,寄せられた回答のどこをどう直したらいいのか分からないでしょ? 手順: まっさらのエクセルブックを用意する Aフォルダの「中」(=「1」から「1000」フォルダの並び)にブックを保存する ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim myFile as string  dim FSO as object  dim myFolder as variant  dim buf as string  myfile = "全部一緒のテキストファイル名.txt" ’自力で正しく修正  cells.clearcontents  range("A1:B1") = array("folder", "item")  set fso = createobject("Scripting.FileSystemObject")  for each myfolder in fso.getfolder(thisworkbook.path).subfolders   open myfolder & "\" & myfile for input as #1   do until eof(1)    line input #1, buf    if buf <> "" then     range("A65536").end(xlup).offset(1) = myfolder.path     range("A65536").end(xlup).offset(0, 1) = buf    end if   loop   close #1  next  set fso = nothing end sub ファイルメニューから終了してエクセルに戻る ALT+F8を押してマクロを実行する 以上です。

noname#208843
質問者

お礼

回答頂き、ありがとうございます。 ご指摘のありました、具体的でない点ですが、 ・「Aフォルダ」の場所はDドライブの直下 ・「テキストファイル」の拡張子は「txt」 ・「エクセル上に具体的にどんな具合に展開したいのか」 → A列にフォルダパス、テキストファイルの各1行をB列の各1行に書き込む(回答頂いた手順で得られる結果の通り) ・「全部一緒なテキストのファイル名」は「リスト.txt」 です。 おかげさまで、ほぼ希望通りの結果が得られました。ですが、「リスト.txt」の中にはUnicode形式で保存されたものが含まれており(これも質問時に漏れていました、申し訳ありません)、それらの内容は文字化けしてエクセルに書き込まれます。 文字化けを回避する方法はないでしょうか?

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.2

それぞれのテキストファイルの末尾に改行記号があれば、 dos窓でできます。 まず、フォルダがEドライブのaaaという名前だとして dos窓で dir:e:\aaa\*. > e:\aaa\dir_list.txt と入力すれば、 (\は半角の円記号です) サブフォルダ名が入ったdir_list.txtというファイルを フォルダaaaに作成することができます。 目的のテキストファイルがbbb.txtだとすると エクセル上で e:\aaa\1\bbb.txt+e:\aaa\2\bbb.txt+・・・・・・ > e:\aaa\all_bbb.txt というデータを作成し それをdos窓で入力すれば bbb.txtを1つに連結したall_bbb.txtというファイルを フォルダaaaに作成することができます。 ファイルの内容が表示される必要が無ければ フォルダ名の横に =hyperlink("e:\aaa\1\bbb.txt","サブフォルダ1") とでも入力しておけば、ハイパーリンクで内容の確認自体は可能です。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>もし何らかのプログラミングが必要であれば、当方ほぼ未経験ですので具体的に例示して頂けると大変ありがたいです。 変な指摘ですが、プログラミングやるような人らにこの一言言うと、「じゃあ自分で勉強してね♪」って言われるのがオチなんで頭の片隅にでも置いといてみてください。(まぁ、プログラミングに限らず、他の業界でもそんな場合はあるでしょうが。 >上記を実現できる方法はありますでしょうか? 方法の検討だけ。 ・grep機能のあるテキストエディタで、正規表現を使用し、文字が存在するファイルを対象として一覧表示をさせ、その結果を加工してエクセルに貼り付ける。 grep機能 詳しくはググってね。文字を検索する機能です。 テキストエディタ テキストを打ちまくれるツールです。無料なものがいっぱいネットで落ちてるので探してみてね。grep機能が付いているものを探しましょう。 正規表現 「半角ドット」が、文字が存在するかどうか?の検索で使えると思います。詳しくはググってね。 grep結果の表示で、ファイルのパスと検索した文字列を合わせて表示するようなものならば(というか、そうでなきゃgrepである意味がないから、そうなってると思うが)そのままコピペして真ん中で分割すれば使えるのではないかと。

関連するQ&A

専門家に質問してみよう