アプリ版:「スタンプのみでお礼する」機能のリリースについて

複数のテキストファイル(.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で選択してセルに貼り付け、
テキストファイルを開いて本文を前文コピーして貼り付け、というやり方でやってますが、
非常に時間がかかって困っています。
よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/10/30 02:19

#3のWendy02です。



objFile.WriteLine (Mid$(fn, InStrRev(fn, "\") + 1) & Chr(13) & Chr(10))

出力をみると、ファイル名の後に、改行コードが入らないようでしたから、
 & Chr(13) & Chr(10)
は要らないようです。

KenKen_SP さんへ
質問主さんの返事を待たずに書いてしまいましたが、単にテキストファイルをファイル名を入れて、出力するだけじゃないかと考えました。Text to Textでしたら、まだ方法がありますね。

私のは、ReadAllを使っているので、ちょっと大丈夫かなと気になりましたが。

この回答への補足

>単にテキストファイルをファイル名を入れて、出力するだけじゃないかと考えました。

そのとおりです。
ありがとうございます。

補足日時:2005/10/30 02:19
    • good
    • 0

こんにちは。

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つのセルに文字列として入れることを考えてます。

補足日時:2005/10/30 02:17
    • good
    • 0

こんにちは。



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

以下のようなバッチファイルを作り、



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
-----
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/10/30 02:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています