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

VBA初心者です。
テキストファイルのデータをEXCELに自動取り込みしてcsv形式で保存したいのですが、テキストデータが65536行を超えているのでWorkbooks.OpenTextでは65537行以後が取り込めません。インターネットで調べた方法FileSystemObjectでテキストデータを1行ごとに取り込もうと思ったのですが、「ユーザー定義型が定義されていません」のエラーメッセージが表示されて旨くいきません。FileSystemObjectの使い方が良く解らないので誰か教えてください。
なお、テキストデータは1行に8フィールド有りますので、取り込んだデータはフィールドごとに8列に分けたいのですが、その方法も解りません。
テキストデータサンプル(1行分)
2004/1/5101 i 10787 10862 1078510825 726690000
以下に試みた方法を記述します。
Option Explicit
Sub READ_TextFile3()
Const cnsFILENAME = "D:\Test\test1.txt"
Dim FSO As New FileSystemObject ' FileSystemObject
Dim TS As TextStream ' TextStream
Dim strREC As String ' 読み込んだレコード内容
Dim GYO As Long ' 収容するセルの行
Set TS = FSO.OpenTextFile(cnsFILENAME, ForReading)
GYO = 1
Do Until TS.AtEndOfStream
strREC = TS.ReadLine
GYO = GYO + 1
Cells(GYO, 1).Value = strREC
Loop
TS.Close
Set TS = Nothing
Set FSO = Nothing
End Sub

A 回答 (3件)

参照設定しない場合は As Objectで宣言して置きます



Dim TS as Object
Const ForReading = 1
Set TS = FSO.OpenTextFile( csnFileName, ForReading )

といった具合にします

参照設定をすれば メソッドや定数などが インテリセンスで入力可能ですが DLLのバージョンが違うなど理由で全ての環境で同じソースで動作が出来ない場合があります
そのような場合に 上記のように記述する事があります

開発時は参照設定をして開発を行い、完成後に AS ObjectとCreateObjectに置き換えます
    • good
    • 0
この回答へのお礼

有難うございました。
上手くいきました。
ファイル制御が少し解っていました。

お礼日時:2008/03/04 20:30

単に空白をカンマに変換したいだけなら、下記でどうでしょうか?


サンプルデータには全角空白もあったので、全角空白もカンマに変換しています。
シートの最大行を超えているからもありますが、1つの文字列で全部の処理を行うと、処理速度が速くなるようです。
ANo.1さんの言っている通り、「参照設定」で「Microsoft Scripting Runtime」にチェックを付けてください。

Sub test()
Const inFilename = "D:\Test\test1.txt"
Const outFilename = "D:\Test\test2.csv"

Dim fso As New FileSystemObject ' FileSystemObject
Dim ts As TextStream ' TextStream
Dim strData As String ' ファイルの内容
'読み込み
Set ts = fso.OpenTextFile(inFilename, ForReading) '読み込みでオープン
strData = ts.ReadAll '全て読み込み
ts.Close 'クローズ
'空白をカンマに変換
strData = Replace(strData, " ", ",") '半角空白をカンマに変換
strData = Replace(strData, " ", ",") '全角空白をカンマに変換
'書き出し
Set ts = fso.CreateTextFile(outFilename) 'テキストファイルを作成(既にある場合は上書きされる)
ts.Write strData '書き込み
ts.Close 'クローズ
'後始末
Set ts = Nothing
Set fso = Nothing
End Sub

p.s.
excelのバージョンが書いてありませんが、excel2007では最大行数が1048576行になってます。
    • good
    • 0
この回答へのお礼

有難うございました。
「参照設定」で「Microsoft Scripting Runtime」にチェックを付けたら実行できました。
EXCELのバージョンは2000です。
65536行に成ったら別ワークシートに書き込むようにする予定です。

お礼日時:2008/03/03 20:25

FileSystemObjectは参照設定が必要です


VBEを起動して ツール > 参照設定を実行
『Microsoft Scripting Runtime』にチェックを付けます
これで実行してみましょう

簡易的にやるなら FSOなどオブジェクト変数を『Object型』として宣言しておいて CreateObjectで代入してみましょう

Dim FOS as Object
Set FSO = CreateObject("Scripting.FileSysytemObject")
といった具合です
    • good
    • 0
この回答へのお礼

有難うございました。
『Microsoft Scripting Runtime』にチェックを付けたら実行できました。
簡易的な方法というのは良く解らないのですが、参照設定で『Microsoft Scripting Runtime』にチェックを付けないで宣言する方法という事なのでしょうか。
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim TS As TextStream
Set TS = FSO.OpenTextFile(cnsFILENAME, ForReading)
としたら、今度はTS行で宣言エラーになってしまいました。

お礼日時:2008/03/03 20:19

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