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
No.3ベストアンサー
- 回答日時:
参照設定しない場合は As Objectで宣言して置きます
Dim TS as Object
Const ForReading = 1
Set TS = FSO.OpenTextFile( csnFileName, ForReading )
といった具合にします
参照設定をすれば メソッドや定数などが インテリセンスで入力可能ですが DLLのバージョンが違うなど理由で全ての環境で同じソースで動作が出来ない場合があります
そのような場合に 上記のように記述する事があります
開発時は参照設定をして開発を行い、完成後に AS ObjectとCreateObjectに置き換えます
No.2
- 回答日時:
単に空白をカンマに変換したいだけなら、下記でどうでしょうか?
サンプルデータには全角空白もあったので、全角空白もカンマに変換しています。
シートの最大行を超えているからもありますが、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行になってます。
有難うございました。
「参照設定」で「Microsoft Scripting Runtime」にチェックを付けたら実行できました。
EXCELのバージョンは2000です。
65536行に成ったら別ワークシートに書き込むようにする予定です。
No.1
- 回答日時:
FileSystemObjectは参照設定が必要です
VBEを起動して ツール > 参照設定を実行
『Microsoft Scripting Runtime』にチェックを付けます
これで実行してみましょう
簡易的にやるなら FSOなどオブジェクト変数を『Object型』として宣言しておいて CreateObjectで代入してみましょう
Dim FOS as Object
Set FSO = CreateObject("Scripting.FileSysytemObject")
といった具合です
有難うございました。
『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行で宣言エラーになってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 別ブックからコピペしたい...
-
Vba UserformからExcelシートの...
-
VBA 別ブックから条件に合うも...
-
Outlookの「受信日時」「件名」...
-
Excel_VBAについて質疑です。(...
-
VB.net(VB)で、フォームにExcel...
-
A列に記載されているフォルダ...
-
VBA 円グラフ 特定条件に一致し...
-
pdfファイルの複数添付 引数の型
-
Outlookにて既にウィドウ単体で...
-
サブフォルダに格納されている...
-
2つのマクロでチェックボックス...
-
【ExcelVBA】インデックスが有...
-
VBAでCOPYを繰り返すと、処理が...
-
配列のペースト出力結果の書式...
-
Excel VBAで値を変えながら、pd...
-
郵便番号検索APIにてget Elemen...
-
VBA実行後に元のセルに戻りたい
-
ExcelVBAマクロで実行した時の疑問
-
VBAの間違い教えて下さい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.netで、ibm漢字で書かれたテキ...
-
html→aspxへのタグ変換方法
-
メールの件名をデコードしたい
-
TCP/IP通信の送信データについて
-
エクスプローラでp1,p2,p3…とい...
-
HTMLEncodeのこと
-
VAX浮動小数点形式
-
Rでのスクリプトのご相談
-
PCサイトを携帯変換してくれるp...
-
au(EZweb)は<font size=>タグ対...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
「1TB」のHDDに日本語は何字入...
-
Excel VBA メール作成について ...
-
DataGridViewの特定列に入力さ...
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
おすすめ情報