- ベストアンサー
VBAでテキストファイルのデータを読み込んでexcel又はcvsファイルに書き出したい
テキストファイルのデータを読み込んで新しくエクセルファイルに書き出してテキストファイルを閉じたいのですがどのようにすればよいでしょうか? テキストファイル 32.1 23.5 12.1 325 12 325 スペースで区切ってあります。 あくまで、これは毎日100回近い繰り返しを行うために必要なのでVBA又はVBE是非教えて頂けたらと思います。ただ、説明が長くなりご迷惑をお掛けするようであれば作成にあたり必要なステートメントなんどのキーワードだけでも結構です。宜しくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>すいません、Execute>0の意味を教えていただけたらと思います。 VBEのヘルプによれば、 FileSearch オブジェクトの Execute メソッド →指定したファイルの検索を開始します。長整数型 (Long) の値を返します。ファイルが見つからなかった場合は 0、1 つ以上のファイルが見つかった場合は正の数を返します。 とあります。txtファイルがあるかどうかの判定です。 ちなみに、VBEとはVisualBasicEditorのことであって、言語ではないです。 勉強というか、とりあえずこのコードをVBEに貼り付けて、フォルダ作ってファイル入れてマクロ実行すればできないですかね? 私も初心者ですが、そんなこと人に言っても仕方ないので、検索したりヘルプみたり普通に質問したりしてなんとかやってます。 それでは、いい加減帰らないと終電なくなりますので、失礼いたします。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
データ-区切り位置を使ってセルに納められると思います。 それをマクロの記録を取ると(一部省略) 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レコード)の場合です。どこを本番では変えるべきか、検討されてはどうでしょう。
- akamanbo
- ベストアンサー率17% (462/2680)
すみません、スペース区切りだって忘れてました。 これでどうですか。 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
補足
再度有難う御座います。 すいません、Execute>0の意味を教えていただけたらと思います。
- akamanbo
- ベストアンサー率17% (462/2680)
手元にコードがあったので、いじってみました。 これでどうですか? 私は#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
お礼
本当に有難う御座います。初心者なもので助かります。今日中に理解して使えるようにしたいと思います。勉強させて頂きます。
- mi-si
- ベストアンサー率35% (200/567)
参考までに、上記のファイル=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
お礼
大変助かります、有難う御座います。一つ一つ理解させていただきます。
- akamanbo
- ベストアンサー率17% (462/2680)
すみません、いきなり汎用性の無い方法になってしまいますが、私がそのような作業を行うのであれば、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
お礼
有難う御座います。参考にさせていただきます。
お礼
お忙しいところ大変ご親切に有難う御座いました。大変助かりました。明日も頑張ってください。