質問: outputPath & ファイル名 & ".dat"」 に書き出せないかという事です。 例えばB列からZ列まで列数があり(25列) 2行目から50000行まで行数があるとすると For next構文開始 B2からB50000までをコピーして 出力ファイルに書き込み 列ごとの終了フラグである「-1, 0.,」という固定文字を書きこみ C2からC50000までをコピーして 出力ファイルに書き込み 列ごとの終了フラグである「-1, 0.,」という固定文字を書きこみ ・ ・ Z2からZ50000までをコピーして 出力ファイルに書き込み 列ごとの終了フラグである「-1, 0.,」という固定文字を書きこみ For next構文終了 EOFのフラグである「-1 」 を書きこみ。 といった感じにすれば早くなりそうな気がするのですが、上記のような構文の書き方が分かりません。それを教えていただきたいです。 使用しているパソコンで試したところ、B2からJ1048576までにそれぞれのセルに半角8文字を入力した状態でコピーをして、それをテキストエディタに張り付けるという事はできたため、メモリー自体は上記のように作業を行ったとしても耐えることができると思われます。 自分で書いたFor next構文の問題が解消できれば随分早くなると思うのでお知恵をお貸しください。
回答: Print # メソッドだと1行ずつファイルに書き出すことなるので、行数が多くなると遅くなります。 出力するテキストを変数に格納して、それを FileSystemObject で一気に書き出すと改善されるでしょう。 あと、Worksheets("節点値").Activate でシートを指定するのではなく、直接Worksheetオブジェクトを参照するほうがいいでしょう。 上記の点を考慮して、自分なりに、コードを書き直してみました。 ``` Public Sub 結果作成1() Dim outStr As String Dim C As Long, R As Long '出力文字列生成 With ThisWorkbook.Worksheets("節点値") For C = 2 To .Range("XFD2").End(xlToLeft).Column '時刻歴繰り返し 'B列から開始 For R = 2 To .Range("b1048576").End(xlUp).Row '節点数繰り返し '2行目から開始 outStr = outStr & .Cells(R, C) & vbCrLf Next outStr = outStr & "-1, 0.," & vbCrLf '列ごとの終了フラグ記入 Next outStr = outStr & " " & -1 'EOFのフラグ記入 End With Dim FileName As String Dim outputPath As String Dim OutFile As String FileName = InputBox("出力ファイル名称を入力") outputPath = ThisWorkbook.Path & "\" '出力ファイルの保存先決定 OutFile = outputPath & FileName & ".txt" 'datという拡張子 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile(OutFile) .Write outStr .Close End With Set FSO = Nothing End Sub ``` 返信に対する追記 > > 書き込みを行う前にいくらか他のセルに打ち込んだ文字列を > > Print 構文を使い事前に書きこませたいです。その場合にはどのようにすれば良いでしょうか? > > > Print は、 Open 出力ファイル For Output As #IntFlNo で開いたファイルに1行ずつ書き込んでいくものです。 Open メソッドと Print メソッドはセットになります。 ですので、今回の回答のコードでは Print は使いません。 ``` With FSO.CreateTextFile(OutFile) .Write outStr .Close End With ``` は、変数outStr に格納されている文字列を一気にファイルに書き出すものです。 これを理解しておいてください。 > > などのようにメモ書きをヘッダーとして書きこんでおきたいという事です。 > > > 変数 outStr に事前に希望の文字列を代入しておくだけです。 「メモ書き」がどこにあるのか不明ですが、 「メモ書き」というシートのA1セルにあるなら、 ``` Public Sub 結果作成1() Dim outStr As String Dim C As Long, R As Long outStr = ThisWorkbook.Worksheets("メモ書き").Cells(1, 1) 'これを挿入 '出力文字列生成 With ThisWorkbook.Worksheets("節点値") '以下略 ```