- ベストアンサー
多数のファイルをExcelに取り込むには?
こんにちは。 あるフォルダに入っている約1000枚の同形式ファイルを、Excelに1ファイルを1行づつで取り込む作業をまとめて出来ないしょうか? 一枚目のファイルのファイル名(3桁の数字)をExcelの1行目のAセルに、ファイル内に書いてある一行目の数字をBセルに、二行目の数字をCセルに。 そして二枚目のファイルをExcelの2行目に同じく・・という様に入れたいんです。 Excelのメニューの「テキストファイルの取り込み」だと、同じ作業を千回近く繰返さなきゃいけないんですよね。 ファイルはテキストタイプで、中身はすべて半角英数です。 文字は違いますがどのファイルも同じ形式、同じ字数で32行入ってます。 こういうのってVBAの分野になるんでしょうか? 使用ソフト オフィス2000
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Excel標準の機能では不可能ですね。 VBAで作ってみました。 Excelファイルを開いて[Alt]+[F11]でVBEditorを起動。 [挿入]-[標準モジュール]を実行。 標準モジュールに以下のコードを貼り付けてください。 --ここから-- Public Sub ReadTextFile() Const FOLDER_PATH As String = "D:\test\" ' 対象ファイルがあるフォルダー Dim FileNum As Integer Dim FileName As String ' 対象ファイルのファイル名 Dim LineText As String ' 対象ファイルから読み込んだ文字 Dim i As Long ' 行番号 i = 1 FileName = Dir(FOLDER_PATH & "*.txt") Do Until FileName = "" FileNum = FreeFile Open FOLDER_PATH & FileName For Input Access Read As FileNum ' 対象ファイルを開く Cells(i, 1).NumberFormatLocal = "@" ' ファイル名のセル書式を「文字列」に設定 Cells(i, 1).Value = Left$(FileName, 3) ' ファイル名(左3文字)を記入 Line Input #FileNum, LineText ' 対象ファイルの1行目を読む Cells(i, 2).Value = LineText ' 対象ファイルの1行目の値を書き込む Line Input #FileNum, LineText ' 対象ファイルの2行目を読む Cells(i, 3).Value = LineText ' 対象ファイルの2行目の値を書き込む Close FileNum ' 対象ファイルを閉じる i = i + 1 FileName = Dir() ' 次の対象ファイルの名前を取得 Loop End Sub --ここまで-- 【解説】 まぁとにかくわからない部分にカーソルを当てて[F1]キーを押せばヘルプが出ますので、それを読んでください。 FileName = Dir(FOLDER_PATH & "*.txt") 拡張子が「txt」のファイルを対象としています。 適宜変更してください。 Cells(i, 1).NumberFormatLocal = "@" この行はファイル名が「001.txt」のように、頭にゼロがつくファイル名だったばあいの処置です。 「a01.txt」のように、先頭が文字なら、この行はいりません。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
#4のものです。省略したところを、やって見ました。 tt1,tt2,tt3と言う1行のテキストファイルをtt1フォルダ内に作り、それをまとめてtttフォルダのtt9と言うファイルにマージ(併合)しました。拡張子は.CSVより.txt のほうが良いかもしれない。.csvではエクセルに関連付け されてしまい判り難いので。 Sub test02() t = "c:\My Documents\tt1\" ' MkDir "c:\My Documents\ttt" Open "c:\My Documents\ttt\tt9.csv" For Output As #2 s = Dir(t) MsgBox s Open t & s For Input As #1 Line Input #1, a MsgBox a Print #2, a Close #1 For i = 1 To 120 s = Dir() MsgBox s If s = "" Then Exit For Open t & s For Input As #1 Line Input #1, a MsgBox a Print #2, a Close #1 Next i Close #2 End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
VBAを使わないと、非常に面倒ないし、実質的には不可能でしょう。 #1のアイデアと#2のご回答内容を組み合わせて、 (1)まず目的とする、同じフォルダ内の多数のファイルを、1つのファイルにする。 即ちインプットファイルはフォルダ内のファイルを1つ読んで、アウトプットファイルに書き、インプットファイルはファイルクローズする。次ぎに第2のインプットファイルを読みアウトプットファイルに書く。 フォルダ内のファイルを全て読み終わったとき、アウトプットファイルをクローズする。 これで一本化したファイルが出来る。 (2)あとは、1本化したファイルをエクセルに手操作で 読みこませれば良い。 (3)フォルダ内のファイル名を捉えるにはDir関数を 使う。 (4)参考までにMy Documentsフォルダのファイル名を全て捉えて表示するプログラム Sub test01() t = "c:\My Documents\" s = Dir(t) For i = 1 To 120 s = Dir() If s = "" Then Exit For MsgBox s Next i End Sub For文の120は予想ファイル数を越える数をセット。 s = Dir()のあとにOPEN、LineInput, Print,Closeを入れます。 この部分は具体的に実例を作るのが時間がかかるので、略します。
お礼
こんばんは。 imogasiさん、アドバイス有難うございます。 さっき帰って来たんですが、これからgooで回答あったのを色々やってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; 「教えてgoo」は名前やアドレス入れたらダメだったんですね。 削除されたらしいです。 有難うございました。
- HAL007
- ベストアンサー率29% (1751/5869)
データのコンバートは得意ですが1000個のファイルとなるとVBAなど 言語を使ってプログラムを書くのが早いでしょうね 力ずくで遣るにしても、1ファイルづつ取り込みをして32行分をコピー して形式を指定して貼り付けるで行列を入れ替える をして行くしかありません。 コマンドプロンプトからコピーコマンドでマージしても1ファイル32行 ですから32千行のデータになってしまいます。 因みにコピーコマンドでファイルをマージする方法は copy 001.txt+002.txt・・・・・ outfail1.txtとします。 copy *.* outfail.txt では上書きの連続で最後に読んだファイルの内容と 同じになります。 コマンドラインも文字数制限がありますから、10個を1個にする程度しか出来ません。 10個で行った場合、111回コマンドを叩く必要があります。 その都度ファイル名を指定する事になるのでやって居られません。
お礼
こんばんは。 HAL007さん、アドバイス有難うございます。 さっき帰ってきたところですが、回答のをいろいろやってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; 「教えてgoo」は名前やアドレス入れたらダメだったんですね。 削除されてたようです。 有難うございました。
- arukamun
- ベストアンサー率35% (842/2394)
まず、読み込みたいファイルが同形式のファイルであれば、マージしてみると言うことを考えてみてはいかがでしょうか。 フォルダには同形式のファイル以外が入っていない事が前提です。 コマンドプロンプトで、ファイルの入っているフォルダに移動し、 COPY *.* OUTPUT1.TXT もし、いろいろなファイルが入っているが拡張子がcsvで統一されているというのであれば、 COPY *.CSV OUTPUT1.CSV ここではOUTPUT1.TXTやCSVとしましたが、ファイル名はフォルダ内にあるファイルと重複しないものであれば、問題ありません。 間違いが起きると、既存のファイルを壊す可能性がありますので、フォルダごとコピーするなりしてバックアップしておいた方が賢明です。 テキスト形式のCSVファイルの様なものだと思われますので、これでOUTPUT1.TXTまたはOUTPUT1.CSVをExcelで開いてみてください。お望みのものになりましたか。 保存の際はTXTやCSVではなく、xls等の形式で保存します。 但し、この方法では、ファイルをコピーする順序が指定されていないので、OUTPUT1.TXTまたはOUTPUT1.CSVの行の順序がお望みの通りにならない事が考えられます。 Excelで加工できるからいいという事であれば、この方法をお試しください。 もし、DOSのコマンドを理解できないのであれば、おすすめできませんので、ご了承ください。
お礼
こんばんは。 arukamunさんアドバイス有難うございます。 さっき帰ってきたところですが、これからやってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; 「教えてgoo」は名前やアドレス入れたらダメだったんですね。 削除されてたようです。 (-_-; 有難うございました。
お礼
こんばんは。 temtecomaiさん、アドバイス有難うございます。 さっき帰ってきたところですが、これから教えて頂いたのをやってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; りっぱなプログラムを作って頂いて有難うございました。
補足
・・補足じゃないですが、連絡欄がないので・・ VBA作っていただき有難うございました。 やってみましたが完璧に成功です! 私の質問が各ファイルの2行目までと取れる書き方でした。 実際は1行目2行目・・といって32行だったんですが、これはコピペで簡単に修正できました。 すごい数のファイルだったので大助かりです。 ありがとうございました。 m(__)m ひろ