こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAにてテキスト出力がうまくいきません

エクセルシートの1列に以下のような文字列を打ち込みました。


-

a
aa
aaa
aaaa
aaaaa

-

b
bb
bbb
bbbb
bbbbb

-

c
cc
ccc
cccc
ccccc

-

「-」の2行後をテキストを出力した際のファイル名とし、ファイル名を含んだ次の「-」までの文字列をそのテキストの中に出力したいです。なお、全体の行数は分かっています。

例えば上の文字列に対して実行すると、
a.txt
b.txt
c.txt
というファイルができ、それぞれの中には
a
aa
aaa
aaaa
aaaaa

などがそれぞれ出力されるようにしたいです。

Sub tepa()

Dim strFilename As String
Dim FileNumber As Integer
Dim strREC As String

j = 1

For i = 1 To 70
If Cells(i, 1) = "-" Then
strFilename = Cells(i + 2, 1) & ".txt"

Do While Cells(i + j, 1) <> "-"

If i > 70 Then
Exit Sub
End If

FileNumber = FreeFile
strREC = Cells(i + j, 1)
Open strFilename For Append As FileNumber
Print #FileNumber, strREC
Close

j = j + 1
Loop
End If
i = i + j

Next


End Sub

さきほど初めてVBAなるものを知り、見よう見まねで書いてみましたが・・・ループに陥ったりテキストファイルが1つめしか出力されなかったりとうまくいきません。

改善点など教えていただけたら嬉しいです。
よろしくお願いします。

投稿日時 - 2013-08-01 20:54:19

QNo.8201752

困ってます

質問者が選んだベストアンサー

1回しか回らない理由
> If i > 70 Then
>   Exit Sub
> End If
Exit Sub では無くて、Exit Forでしょう。

せっかくForループで廻しているのに、jでDoループ作るのは???
Do While Cells(i + j, 1) <> "-"
の外(前)側でファイルオープンしないと、同じファイル上書きしますぞ。

投稿日時 - 2013-08-01 21:52:06

お礼

回答ありがとうございます。
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が不正だと言われました。
がんばってみます。

投稿日時 - 2013-08-02 12:26:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2013-08-03 23:43:48

あなたにオススメの質問