- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAにてテキスト出力がうまくいきません)
エクセルVBAでテキストファイルへの出力がうまくいかない
このQ&Aのポイント
- エクセルVBAを使ってテキストファイルにデータを出力する際に問題が発生しています。行ごとに処理を行い、指定された行から次の指定行までのデータを取得し、ファイルに出力するプログラムを作成していますが、うまく動作していないようです。
- 具体的には、指定された行と次の指定行までのデータを取得する処理が正しく行われていないため、テキストファイルに出力されるデータが正しくない状態になっています。また、ファイルの出力も1つのファイルしか書き込まれないという問題もあります。
- 改善点としては、ループ処理の条件式やカウンタの増加方法、ファイルのオープンとクローズのタイミングなどを見直す必要があります。また、データの取得方法や出力方法も確認し、適切な処理を行うように修正する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1回しか回らない理由 > If i > 70 Then > Exit Sub > End If Exit Sub では無くて、Exit Forでしょう。 せっかくForループで廻しているのに、jでDoループ作るのは??? Do While Cells(i + j, 1) <> "-" の外(前)側でファイルオープンしないと、同じファイル上書きしますぞ。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
回答No.2
Option Explicit '' 変数の宣言をチェックしてくれるキーワード Sub tepa() Dim strFilename As String Dim FileNumber As Integer Dim strREC As String Dim i as long For i = 1 To 70 '' 7行でワンセット×10セットの狙い撃ち If Cells(i, 1) = "-" Then i = i + 2 strFilename = Cells(i, 1) & ".txt" FileNumber = FreeFile Open strFilename For Output As FileNumber Elseif Cells(i, 1) = "" Then '' スペース行判定がちょっとちがうかも。 close Else Print #FileNumber, Cells(i, 1) End If Next End Sub
お礼
回答ありがとうございます。 Exit For ですね。ちゃんと回るようになりました。 >せっかくForループで廻しているのに、jでDoループ作るのは??? 1,Cells(i,1)が"-"かどうかを判定 2,もし"-"ならi+2番目をファイル名にする 3,Cells(i+j,1)が"-"じゃない間、2のファイル名のファイルに1行ずつプリントしていく(j++) 4,Cells(i + j,1)が"-"だったらループを抜けて、i = i + j番目からまた1の判定をしていく というアルゴリズムでやろうと思ったのですが… 的外れなことをやってるんでしょうか… ファイルのオープンとFileNumberの代入式をループの外に出したら、Print の#FileNumberが不正だと言われました。 がんばってみます。