こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAでテキストファイルのデータを読み込んでexcel又はcvsファイルに書き出したい

テキストファイルのデータを読み込んで新しくエクセルファイルに書き出してテキストファイルを閉じたいのですがどのようにすればよいでしょうか?

テキストファイル
32.1 23.5
12.1 325
12  325
スペースで区切ってあります。

あくまで、これは毎日100回近い繰り返しを行うために必要なのでVBA又はVBE是非教えて頂けたらと思います。ただ、説明が長くなりご迷惑をお掛けするようであれば作成にあたり必要なステートメントなんどのキーワードだけでも結構です。宜しくお願い致します。

投稿日時 - 2004-02-18 19:27:48

QNo.783212

e-l

暇なときに回答ください

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

>すいません、Execute>0の意味を教えていただけたらと思います。

VBEのヘルプによれば、

FileSearch オブジェクトの Execute メソッド
→指定したファイルの検索を開始します。長整数型 (Long) の値を返します。ファイルが見つからなかった場合は 0、1 つ以上のファイルが見つかった場合は正の数を返します。

とあります。txtファイルがあるかどうかの判定です。

ちなみに、VBEとはVisualBasicEditorのことであって、言語ではないです。
勉強というか、とりあえずこのコードをVBEに貼り付けて、フォルダ作ってファイル入れてマクロ実行すればできないですかね?
私も初心者ですが、そんなこと人に言っても仕方ないので、検索したりヘルプみたり普通に質問したりしてなんとかやってます。

それでは、いい加減帰らないと終電なくなりますので、失礼いたします。

投稿日時 - 2004-02-18 23:38:50

お礼

お忙しいところ大変ご親切に有難う御座いました。大変助かりました。明日も頑張ってください。

投稿日時 - 2004-02-18 23:58:30

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

データ-区切り位置を使ってセルに納められると思います。
それをマクロの記録を取ると(一部省略)
Sub Macro1()
Range("A1:B4").Select
With Selection
.MergeCells = False
End With
Range("A1:A4").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(6, 1))
End Sub
質問の例の4行(4レコード)の場合です。どこを本番では変えるべきか、検討されてはどうでしょう。

投稿日時 - 2004-02-18 22:35:12

ANo.4

すみません、スペース区切りだって忘れてました。
これでどうですか。

Sub test()

With Application.FileSearch
' ↓このフォルダの中のファイルを処理
.LookIn = "C:\aaaa"
.Filename = "*.txt"

If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Workbooks.OpenText Filename:=.FoundFiles(i), Origin:=932, StartRow:=1 _
, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3 _
, 1), Array(4, 1)), TrailingMinusNumbers:=True

ActiveWorkbook.SaveAs FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close False
Next i
MsgBox "全て終わりました。"
Else
MsgBox "このフォルダに.txtファイルはありません。"
End If
End With
End Sub

投稿日時 - 2004-02-18 22:33:33

補足

再度有難う御座います。
すいません、Execute>0の意味を教えていただけたらと思います。

投稿日時 - 2004-02-18 23:16:44

ANo.3

手元にコードがあったので、いじってみました。
これでどうですか? 私は#1のほうがいいですけど。
その方が処理がずっと速いと思うので。

Sub test()

With Application.FileSearch
        ' ↓このフォルダの中のファイルを処理
.LookIn = "C:\aaaa"
.Filename = "*.txt"

If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(i)

ActiveWorkbook.SaveAs FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close False
Next i
MsgBox "全て終わりました。"
Else
MsgBox "このフォルダに.txtファイルはありません。"
End If
End With
End Sub

投稿日時 - 2004-02-18 22:15:35

お礼

本当に有難う御座います。初心者なもので助かります。今日中に理解して使えるようにしたいと思います。勉強させて頂きます。

投稿日時 - 2004-02-18 22:27:59

ANo.2

参考までに、上記のファイル=E:\text\test.txtファイルを読み込んで、(スペース区切り)E:\text\text.xlsに掃き出すMACRO(VBA)

Sub Macro1()
Workbooks.OpenText Filename:="E:\text\test.txt", StartRow:=1, DataType:= _
xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab _
:=False, Semicolon:=False, Comma:=False, Space:=True, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1))
ActiveWorkbook.SaveAs Filename:="E:\text\test.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub

投稿日時 - 2004-02-18 20:45:41

お礼

大変助かります、有難う御座います。一つ一つ理解させていただきます。

投稿日時 - 2004-02-18 20:50:01

ANo.1

すみません、いきなり汎用性の無い方法になってしまいますが、私がそのような作業を行うのであれば、textファイル中のスペースをまとめてタブに置換し、然る後にまとめて全ての拡張子.txtを.csvにします。
csvの中身はただのタブ区切りテキストなので。

一括置換に使っているソフトはこちら
http://www.vector.co.jp/soft/win95/util/se142895.html
※正規表現だとタブは「\t」

ファイルのリネームに使っているのはこちら
http://www.vector.co.jp/soft/win95/util/se131133.html

投稿日時 - 2004-02-18 19:39:52

お礼

有難う御座います。参考にさせていただきます。

投稿日時 - 2004-02-18 20:50:32

あなたにオススメの質問