• ベストアンサー

複数のテキストファイルをひとつのエクセルシートにまとめるには?

複数のテキストファイル(.txt)をエクセルのひとつのシートにまとめるにはどうすればいいですか? またその際、個々のテキストファイルのファイル名を本文の前に挿入したいのですが、 そのやり方も教えていただけると助かります。 ただ、フリーソフトを使わずエクセルの機能だけでやりたいのでよろしくお願いします。 ↓のような感じにしたいです。 ------------------------------------------- test1.txt data data data data data data data data data data data data data data data data data data data test2.txt data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 data2 ------------------------------------------- Sheet1 現在、一つ一つのテキストファイルの名前をF2で選択してセルに貼り付け、 テキストファイルを開いて本文を前文コピーして貼り付け、というやり方でやってますが、 非常に時間がかかって困っています。 よろしくお願いします。

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

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

こんにちは。 #2のWendy02です。返事を待たずに、VBA用のコードを、WSH(Windows Script Host)を意識して、作ってみました。ただし、WSHに換えるためには、細かい点は直さなくてはなりません。 Sub TextFileConbining() 'テキストファイルをファイル名を出力てつなげる Dim BaseFileName As String Dim FileName As Variant Dim fn As Variant Dim FileNo As Integer Dim objFSO As Object Dim objFile As Object Dim objText As Object Dim TextLines As String  Set objFSO = CreateObject("Scripting.FileSystemObject")  BaseFileName = Application.InputBox("ベース・テキストファイル名をつけてください。" & vbCrLf & "拡張子(.txt)は不要です。", Type:=2)   If VarType(BaseFileName) = vbBoolean Or BaseFileName = "" Then Exit Sub  FileName = Application.GetOpenFilename("テキストファイル(*.txt),*.txt", , , , True)   If VarType(FileName) = vbBoolean Then Exit Sub  Set objFile = objFSO.OpenTextfile(ThisWorkbook.Path & "\" & BaseFileName & ".txt", 8, True)    For Each fn In FileName   If fn Like ThisWorkbook.Path & "\" & BaseFileName & ".txt" Then    MsgBox fn & "は、ベース・テキストファイル名と同じです。" & Chr(13) & "スキップします。", vbInformation   Else   objFile.WriteLine (Mid$(fn, InStrRev(fn, "\") + 1) & Chr(13) & Chr(10))   Set objText = objFSO.OpenTextfile(fn)   TextLines = objText.ReadAll   objText.Close   objFile.Write TextLines   End If  Next  objFile.Close  Beep '終了の合図  Set objFile = Nothing: Set objFSO = Nothing End Sub

abspectra
質問者

お礼

返事遅れてすみません。回答ありがとうございます。 家のPCにエクセルが入ってないので来週職場で早速ためしてみます。 ありがとうございました。

その他の回答 (4)

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

#3のWendy02です。 objFile.WriteLine (Mid$(fn, InStrRev(fn, "\") + 1) & Chr(13) & Chr(10)) 出力をみると、ファイル名の後に、改行コードが入らないようでしたから、  & Chr(13) & Chr(10) は要らないようです。 KenKen_SP さんへ 質問主さんの返事を待たずに書いてしまいましたが、単にテキストファイルをファイル名を入れて、出力するだけじゃないかと考えました。Text to Textでしたら、まだ方法がありますね。 私のは、ReadAllを使っているので、ちょっと大丈夫かなと気になりましたが。

abspectra
質問者

補足

>単にテキストファイルをファイル名を入れて、出力するだけじゃないかと考えました。 そのとおりです。 ありがとうございます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。KenKen_SP です。 > test1.txt > data data data data data data data data > data data data data data > data data data data data data これって、フィールド数可変のスペース区切りのデータファイル ですか? つまり、 data data data とあれば、3つのセルに分割してインポートするってこと? テキストファイル名を表示させて、さらにセルにも分割するなら、 バッチコマンドだけでは無理ではないでしょうか? VBA でやるなら、一行ごと読み込んで Split 関数でばらして転記 することになりそうです。

abspectra
質問者

補足

回答ありがとうございます。 区切りはスペースで、 各行の1つのセルに文字列として入れることを考えてます。

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

こんにちは。 Excelの機能だけっておっしゃっていますが、それは、VBAも含まれるのですか?つまり、VBAでしか、Excel上はできませんね。#1さんのBatchプログラムの親戚のWindows Script Hostで作る方法もありますが。

回答No.1

以下のようなバッチファイルを作り、 combine outfile.txt test1.txt test2.txt ... と入力すれば、outfile.txt にお望みのものが出力されます。フォルダ内の拡張子 .txt のファイルすべてをまとめるのなら、 combine outfile.txt *.txt のようにもできます。 ----- combine.bat @echo off setlocal set outfile=%~1 shift type nul > "%outfile%" for %%A in (%*) do ( if not "%%~A" == "%outfile%" ( echo %%A type "%%~A% ) ) >> "%outfile%" endlocal -----

abspectra
質問者

お礼

なるほど、エクセル上でやらなくてもいいんですね。 見方が変わりました。 ありがとうございました。

関連するQ&A