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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
.netで、ibm漢字で書かれたテキ...
-
html→aspxへのタグ変換方法
-
ポインター引数の関数でコンパ...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
Excel VBA メール作成について ...
-
ビットスワップとバイトスワッ...
-
全角半角を調べるライブラリ関...
-
pythonでDBのカラム名で取得し...
-
構造体のソートの方法について...
-
number 改行が追加できない
-
エクセルシート名の制限を変更...
-
POSTで配列のデータを渡す方法は?
-
stable diffusionのエラー
-
VB6でのファイルサイズ取得につ...
-
MACの改行コード変更について教...
-
Rstudioによるテキストマイニン...
-
POSTメソッドの最大容量について
-
クロス集計
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信の送信データについて
-
Rでのスクリプトのご相談
-
html→aspxへのタグ変換方法
-
HTMLEncodeのこと
-
.netで、ibm漢字で書かれたテキ...
-
VAX浮動小数点形式
-
メールの件名をデコードしたい
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
stable diffusionのエラー
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
おすすめ情報