月刊プログラム!
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とかのモードの操作をやります(と思う)。