- ベストアンサー
複数のテキストファイルをひとつのエクセルシートにまとめるには?
複数のテキストファイル(.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で選択してセルに貼り付け、 テキストファイルを開いて本文を前文コピーして貼り付け、というやり方でやってますが、 非常に時間がかかって困っています。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 #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
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#3のWendy02です。 objFile.WriteLine (Mid$(fn, InStrRev(fn, "\") + 1) & Chr(13) & Chr(10)) 出力をみると、ファイル名の後に、改行コードが入らないようでしたから、 & Chr(13) & Chr(10) は要らないようです。 KenKen_SP さんへ 質問主さんの返事を待たずに書いてしまいましたが、単にテキストファイルをファイル名を入れて、出力するだけじゃないかと考えました。Text to Textでしたら、まだ方法がありますね。 私のは、ReadAllを使っているので、ちょっと大丈夫かなと気になりましたが。
補足
>単にテキストファイルをファイル名を入れて、出力するだけじゃないかと考えました。 そのとおりです。 ありがとうございます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。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 関数でばらして転記 することになりそうです。
補足
回答ありがとうございます。 区切りはスペースで、 各行の1つのセルに文字列として入れることを考えてます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Excelの機能だけっておっしゃっていますが、それは、VBAも含まれるのですか?つまり、VBAでしか、Excel上はできませんね。#1さんのBatchプログラムの親戚のWindows Script Hostで作る方法もありますが。
- oldroot2005
- ベストアンサー率66% (68/103)
以下のようなバッチファイルを作り、 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 -----
お礼
なるほど、エクセル上でやらなくてもいいんですね。 見方が変わりました。 ありがとうございました。
お礼
返事遅れてすみません。回答ありがとうございます。 家のPCにエクセルが入ってないので来週職場で早速ためしてみます。 ありがとうございました。