• ベストアンサー

多数のファイルをExcelに取り込むには?

こんにちは。 あるフォルダに入っている約1000枚の同形式ファイルを、Excelに1ファイルを1行づつで取り込む作業をまとめて出来ないしょうか? 一枚目のファイルのファイル名(3桁の数字)をExcelの1行目のAセルに、ファイル内に書いてある一行目の数字をBセルに、二行目の数字をCセルに。 そして二枚目のファイルをExcelの2行目に同じく・・という様に入れたいんです。 Excelのメニューの「テキストファイルの取り込み」だと、同じ作業を千回近く繰返さなきゃいけないんですよね。 ファイルはテキストタイプで、中身はすべて半角英数です。 文字は違いますがどのファイルも同じ形式、同じ字数で32行入ってます。 こういうのってVBAの分野になるんでしょうか? 使用ソフト オフィス2000            

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

  • ベストアンサー
noname#102878
noname#102878
回答No.3

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」のように、先頭が文字なら、この行はいりません。

hiro-ss
質問者

お礼

こんばんは。 temtecomaiさん、アドバイス有難うございます。 さっき帰ってきたところですが、これから教えて頂いたのをやってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; りっぱなプログラムを作って頂いて有難うございました。

hiro-ss
質問者

補足

・・補足じゃないですが、連絡欄がないので・・ VBA作っていただき有難うございました。 やってみましたが完璧に成功です! 私の質問が各ファイルの2行目までと取れる書き方でした。 実際は1行目2行目・・といって32行だったんですが、これはコピペで簡単に修正できました。 すごい数のファイルだったので大助かりです。 ありがとうございました。 m(__)m                       ひろ

その他の回答 (4)

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

#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/17068)
回答No.4

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を入れます。 この部分は具体的に実例を作るのが時間がかかるので、略します。

hiro-ss
質問者

お礼

こんばんは。 imogasiさん、アドバイス有難うございます。 さっき帰って来たんですが、これからgooで回答あったのを色々やってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; 「教えてgoo」は名前やアドレス入れたらダメだったんですね。 削除されたらしいです。 有難うございました。

  • HAL007
  • ベストアンサー率29% (1751/5869)
回答No.2

データのコンバートは得意ですが1000個のファイルとなるとVBAなど 言語を使ってプログラムを書くのが早いでしょうね 力ずくで遣るにしても、1ファイルづつ取り込みをして32行分をコピー して形式を指定して貼り付けるで行列を入れ替える をして行くしかありません。 コマンドプロンプトからコピーコマンドでマージしても1ファイル32行 ですから32千行のデータになってしまいます。 因みにコピーコマンドでファイルをマージする方法は copy 001.txt+002.txt・・・・・ outfail1.txtとします。 copy *.* outfail.txt では上書きの連続で最後に読んだファイルの内容と 同じになります。 コマンドラインも文字数制限がありますから、10個を1個にする程度しか出来ません。 10個で行った場合、111回コマンドを叩く必要があります。 その都度ファイル名を指定する事になるのでやって居られません。

hiro-ss
質問者

お礼

こんばんは。 HAL007さん、アドバイス有難うございます。 さっき帰ってきたところですが、回答のをいろいろやってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; 「教えてgoo」は名前やアドレス入れたらダメだったんですね。 削除されてたようです。 有難うございました。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

まず、読み込みたいファイルが同形式のファイルであれば、マージしてみると言うことを考えてみてはいかがでしょうか。 フォルダには同形式のファイル以外が入っていない事が前提です。 コマンドプロンプトで、ファイルの入っているフォルダに移動し、 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のコマンドを理解できないのであれば、おすすめできませんので、ご了承ください。

hiro-ss
質問者

お礼

こんばんは。 arukamunさんアドバイス有難うございます。 さっき帰ってきたところですが、これからやってみます。 これが上手くいけば労力は10分の1で済むかなぁ。(^_^; 「教えてgoo」は名前やアドレス入れたらダメだったんですね。 削除されてたようです。 (-_-; 有難うございました。

関連するQ&A

  • Excelの一行を一ファイルとして保存する方法は?

    一週間まえ、多数ファイルをExcelに取り込む方法を教えて頂いたヒロです。 その時はtemtecomaiさんにVBAを作って頂き他の方からもアドバイスして頂き有難うございました。 で、こんどは逆にExcelの一行を、元の様に一枚のTXTファイルに戻したいんですんですが、やりかたを教えてもらえないでしょうか。 。 セル内の数字は一部変わってますが形式や文字数はExcelに読み込んだ時のままです。 シート1行目のAセルの数字(三桁)をファイル名とし、Bセルの数字をそのファイル内の1行目に書き込み、Cセルの数字を2行目に書き込み、Dセルのを3行目に、同じくEセル、Fセル・・・・AGセルまで。 次にシートの2行目も同じように、さらに3行目、4行目・・・・。 それで行数分の枚数のTXTファイルを作りたいんです。 m(__)m                     * ヒロ *

  • テキストファイルをエクセルに落としたい

    1行だけのテキストファイルが1000ファイル位あります。 ※1行の長さは5000文字位あります。 それをエクセルのセルに1つずつ改行をしないで入れて行きたいのですが、 手作業ではしんどく良い方法はないでしょうか? よろしくお願いします。

  • エクセル2007の入力で作業の効率化を図りたいです

    大変お世話になります。 エクセル2007での質問です。 ある作業の効率化を図りたいため、ご教授頂けると本当に助かります。 【以下が普段行っている作業です】 ●エクセルのファイルが2つあります。(エクセルファイル(1) エクセルファイル(2) とします。) ●エクセルファイル(1)の各行のセルに行ごとに異なる5~6桁程の数字があります。エクセルファイル(2)の各行のセルにも行ごとに異なる5~6桁程の数字があります。 1)エクセルファイル(1)とエクセルファイル(2)のセルにある5~6桁程の異なる数字から、エクセルファイル(1)のどの行かを特定します。  (エクセルファイル(2)の5~6桁程の該当の数字をコピーし、エクセルファイル(1)にフィルターをかけて、「指定の値に等しい」に入力し、どの行か特定します) 2)エクセル(2)の2つのセルの情報(年月日:例えば20/04/02、と、金額:例えば1350)をエクセル(1)の該当のセルに値貼りをします。(例として、エクセル(2)のX列(金額)をエクセル(1)のAB列(金額)に値貼りのように、エクセル(2)のX列、エクセル(1)のAB列といった列はX列、AB列で変わりません。いつも同じ列の情報です。年月日も同様で、例としてエクセル(2)のZ列(年月日)をエクセル(1)のAC列(年月日)へ値貼りします) (何故値貼りをするのかというと、エクセル(1)の多くのセルに色々な関数が含まれているためです。) ◆注意点:時々、エクセル(2)にある5~6桁程の異なる数字はエクセル(1)と異なっており、どの行か特定出来ない場合があります。 その際は別のセルの数字等で検索して該当の行を特定します。 量が多いと、このような作業で時間を取られてしまいます。 マクロを組む等といった(その他の方法でも差し支えございません)、時間短縮の出来る良い方法を分かり易くご教授頂けると本当に助かります。 恐れ入りますが、早めのご回答を心よりお待ちしております。 どうぞ宜しくお願い申し上げます。

  • エクセルの指数化け!?

    いま大変困っています。 会社のホストコンピュータからエクセルにデータをダウンロードをします。 これはエクセルでファイルが出力されるので最初からエクセルに書式を設定はできません。 そのデータのうち、おびただしい契約のコード(5桁)があるのですが、 たとえば 10A15 1G123 20B25 3013F 3A555 AX121 のようなもので、英数半角です。(数字だけもあります。) 通常は何も問題がないのですが、途中にEが入ると、 201E7→2.01E+09 2E137→2.00E+137 1E231→1.00E+231 10E75→1.00E+76 101E8→1.01E+10 のように文字化け(指数化け)してしまいます。 わたしの仕事は、この5桁のコードを、先頭の2桁と後ろの3桁に分けたいのですが、指数からではできません。 エクセルでなくCSVなどのテキスト形式で出力してもらえばいいのでしょうが、かなり時間がかかりそうで、当面は化けたエクセルから判読するほかなさそうです。 何か良い方法はないでしょうか? 関数でも、VBAでもかまいません。 お助けください。

  • エクセルからtxtファイルへの変換

    宜しくお願いします。 txtファイルがあります。 中には、14桁の数字があります。 データが膨大なので編集しやすいようにエクセルで読み込みます。 この数字以外の一部を変更します。(1行削除または1列全部同じデータに修正等) 最後にTAB区切りのtxtファイルで保存すると、この14桁の数字が丸められてしまいます。(例56000500000058⇒56000000000000) 書式の表示形式を文字列にするのはなぜか設定してからセルをダブルクリックしないと元の数字列にならないので5000行もあるデータの編集等やってられません。 何かよい方法ありませんか。 要は、5000行もあるtxtファイルの編集を簡単に行ないたいのです。 たとえば、ある列の5000行をいっせいに0から1に変更したいとか。 簡単そうでなかなか思い浮かびません。

  • CSVファイルの分析について

    CSVファイルで3MB程の容量のファイルが30個近くあります。 このファイルの分析をしないといけないのですが 手作業では無理があるため、マクロなり、関数なりで 対処できないものかと思いご相談させて頂きます。 分析の流れとしては CSVファイルをExcelで開き、特定の文字(3桁か4桁の数字)が 入っているセルを探し、どの数字が何回使われたかをカウントします。 数字は3桁もしくは4桁ですが、全角・半角は統一されていません。 全角のものもあれば、半角のものもあります。 1111が1回、222が4回といった感じです。 みなさんのお知恵をお貸しいただけないでしょうか。 よろしくお願いします。

  • こんなことできますか?(エクセル)

    お世話になります。 エクセル2000を使用しているのですが、あるセルに9桁の数字が入ってます。 その数字の一番右(1桁目)を削除したいのですが、普通ならそのセル内でBackspaceで消して8桁にすると思います。 今、この9桁の数字のセルが数百行あります。 一気にこの数百行の1桁目だけの数字を消すことってできますか。 やはり地道に各セル毎で消していくしかないのでしょうか。 よろしくお願いします。

  • csvをエクセルに取り組みたい。初心者

    csvをエクセルに自動マクロ機能で取り込むように設定しました。 12ケタの数字を取り込みたいが9.73E+11となってしまいます。 aのフォルダにa.csv と b.xlsxがあります。 a.csvにダウンロードしたものをb.xlsxに読み込みたいです。 12行のデーターの中から2個のデーターだけを読み込みたいのですが 12ケタの数字もそのままの数字で読み込むことは不可能なのでしょうか? 今まではcsvの表示形式を数字に変換してからブック形式に保存。 そして、テキストにデーターを張り付けてデーターを使用していました。 ブックからデーターをコピーして貼り付けると数字が半角になっていないためできませんでした。 この一連の作業を自動でできたらうれしいかなと思いましたが無理でしょうか? もし、わかる方がおられましたら教えてください。 よろしくお願いします。

  • エクセルの文字列操作の仕方

    ご存じの方がいらっしゃいましたら、教えてください。 今、エクセルの住所リストを固定長のテキストファイルに変換する作業をしています。 このやり方が合ってるのかわかりませんが、各項目のデータを「&」で結んで、ひとりのデータを1行のテキストデータにしようとしています。 というわけで作業をしているんですが、他の項目はうまくいくんですが、電話番号の部分で、指定フォーマット(半角12文字)への変換ができずに行き詰まってしまいました。 どういうことかと言いますと、エクセルの数字を12桁の文字列に統一できないのです。(10桁の数字+2桁の空白という風に) 電話番号のほとんどは10桁ですが、中にはブランクとか携帯の11桁とか、いろいろあります。 件数が多いので、1件1件2桁のブランクを加えるわけにもいきません。 いい方法がありましたら、ご教授お願いいたします。

  • CDに書き込んだエクセルファイルが読み込めない

    CDに書き込んだエクセルファイルがファイル名の途中から数字一桁が付加されていて、テキスト形式で意味不明の内容でしか開けません。正常に開けるように復旧できませんか?中には開けるものもあるのですが、ほとんどだめです。

専門家に質問してみよう