- ベストアンサー
VBA初心者がテキストファイルをEXCELに自動取り込む方法
- VBA初心者がテキストファイルのデータをEXCELに自動取り込みする方法を教えてください。
- テキストデータが65536行を超えているため、Workbooks.OpenTextでは65537行以降が取り込めません。
- FileSystemObjectを使用して1行ごとにテキストデータを取り込む方法がわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
参照設定しない場合は As Objectで宣言して置きます Dim TS as Object Const ForReading = 1 Set TS = FSO.OpenTextFile( csnFileName, ForReading ) といった具合にします 参照設定をすれば メソッドや定数などが インテリセンスで入力可能ですが DLLのバージョンが違うなど理由で全ての環境で同じソースで動作が出来ない場合があります そのような場合に 上記のように記述する事があります 開発時は参照設定をして開発を行い、完成後に AS ObjectとCreateObjectに置き換えます
その他の回答 (2)
- fumufumu_2006
- ベストアンサー率66% (163/245)
単に空白をカンマに変換したいだけなら、下記でどうでしょうか? サンプルデータには全角空白もあったので、全角空白もカンマに変換しています。 シートの最大行を超えているからもありますが、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行に成ったら別ワークシートに書き込むようにする予定です。
- redfox63
- ベストアンサー率71% (1325/1856)
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行で宣言エラーになってしまいました。
お礼
有難うございました。 上手くいきました。 ファイル制御が少し解っていました。