月刊プログラム!
Visual Basic For Excel

Vol_13
2001.JUL.23

Presented by kouta_y
感想等は掲示板、苦情はメールへ。

にこちゃん
最近はもっぱらC言語ばっかやってるもんで、いざVBをやろうとすると、ついつい最後に「;」と打ってしまったり、
IF文に「()かっこ」を付けたり、「{}大かっこ」を付けたりしてしまう。。。
体が勝手に動くのだ・・・。
舞った舞った(まいった)。


ファイルの書き込み操作

前回はファイルの読み込みをやりました。
なんで、今回は書き込みをやります。

前回説明を省いたんですが、Openステートメントでファイルを開く場合、「開くモード」とか「アクセスモード」とかいろいろ引数を設定できます。
僕は特に必要ないと思ってる引数とかは、ばんばん省略してしまうので、「ちょっち知りたいなぁ」と思ってる人はヘルプとか見てみると詳しく
のってます。
例えばこんなモードで開く事も出来ます。

Open "C:\AAA.txt" For Random Access Read Lock Read Write As #1 Len = 10

これは
「"C:\AAA.txt"ファイルをランダムアクセス、読み取り専用で開き、他プロセスからはCloseするまで読み書き出来なくする。1度に読み込めるサイズは10バイトとする」
ってな意味になります。
Lenなんて、普通は使わないですね。

えーっと、それでは、本題に入ります。
まず書き込みが出来るモードは「OutPut」「Append」「Binary」「Random」の4つです。
今回は「Output」「Append」の2つを使います。
この2つはテキストモードなので、結構楽です。

まずOutputでの基本コード
実行する前にエクセルブックはどこかに保存しといてください。

Sub WriteFile()
Dim Path          As String
Dim Data(0 To 10) As String
Dim NO As Integer, i As Integer

Sheets(1).Select 'Sheetの選択

Path = ThisWorkbook.Path & "\Test.txt"
For i = 0 To 10
    Data(i) = Cells(i + 1, 1).Value 'セルの内容を変数に格納
Next i

NO = FreeFile '使ってないファイル番号の取得関数
Open Path For Output As #NO
    For i = 0 To 10
      Print #NO, Data(i)
    Next i
Close #NO

End Sub

実行結果(Test.txtの中身):

a
b
c
d
e
f
g
h
i
j

これは作者が適当に、A1〜A10のセルにa〜jと打ったからです。
今度はセルに何も入力しない、もしくは今の値とは全く違う値を入力して実行してみてください。
ファイルは消さずに、そのままにしておいてください。

実行結果(Test.txtの中身):











作者は何も入力せずに実行しました。
ただ単に改行は10個くらい続いているだけですね。
値を入力した方は、それがファイルに保存されていると思います。

はい。Outputモードですと、こうゆう事になります。
「どうゆう事?」
と思われた人の為に説明すると、Outputで開いた時、既にファイルが存在する場合、ファイルは上書きされてしまいます。
既存のファイルの内容は破棄されるんです。
「それがどうしたの?」
と思われた人の為に説明します。
例えば、何かエクセルで処理をしたとします。
なんでもいいです。例えば「印刷」をするような処理だったとします。マクロで。
その印刷履歴を、.logファイルにして、残したい時があります。
そんな時、Outputで処理したら、呼び出すたんびにファイルは上書きされてしまい、今回印刷した分の履歴しか残らなくなってしまいます。
過去の履歴が残らない履歴となってしまいます。(それでいいって場合は良いですが、、、)

まぁ回避する方法は、エクセルブック自体に残すとか、Inputで全部読み込んでOutputで上書きするでも出来ますが、
前者の場合、エクセルブックのサイズが印刷するたびに大きくなってきます。後者の場合、面倒臭いです。(作者は面倒くさがり)

こんな時は「Append」というモードを使うと便利です。
Appendは「追加書き込み」ってなモードの事です。
常に最終行に書き込みが出来るんですね。

では、さっきOutputで作ったファイルをそのままにして、コードをOutputからAppendに変更してください
変更点はそれだけです。
んでは、実行してみます。

実行結果(Test.txtの中身):











a
b
c
d
e
f
g
h
i
j

はい。作者のはこうなりました。
セルにまたabc...と打ったんですね。


お終い

今回はこれで終わりです。
OutputとAppendの違いがわかればOKです。
あと両方とも、ファイルが存在しない場合は、新規にファイルが作成されます。
履歴なんか残したい時は、常にAppendで開けばOKそうですね。

次回はBinaryとかのモードの操作をやります(と思う)。