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

Vol_10
2001.JUN.25

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

にこちゃん
えーこれ書いてる現在は夏で、かなり暑い日です・・・。
そしてこれからプログラムを作ろうと思うと、もっと熱くなります。。。
みなさんは熱くなりますか?
なるわけないですね・・・。
は・・・ははは・・・。(←夏ボケ)


ファイルを作る!

えー今回はちょっとファイル操作関連をやってみようかと思います。
ファイル操作とはどんな事?
まぁ作ったり、消したり、変更したり・・・ですね。
エクセルマクロではそうそう頻繁に使う機会ないかも知れませんが、覚えると便利です♪
関係ないけど、筆者は現在画像系ファイルの解析にやっきになってます・・・。

ではでは、さっそく。
まずはファイルの作り方。
とりあえず下のコードを打ってみてください。
エクセルブックはどこか、自分の分かりいい場所にに保存してください。別にアブナイ処理するわけではありません。

Sub MakeFile()
'ファイルを作る
Dim strFileName As String 'ファイル名
Dim strPath        As String 'フルパス

'
'ActiveWorkbook.Path: Excelの機能です。現在ブックが置かれているパスを返します。
'

strFileName = "\Sample.txt"
strPath = ActiveWorkbook.Path & strFileName

'Openステートメント
Open strPath For Output As #1
   Print #1, "たろの部屋"
    Print
#1, "ファイル操作サンプル"
Close #1

End Sub

およよ、文字に色が・・・!?
はいえーと、これは作者が、見る側の人の事を考慮して、見やすくしたつもりです。
エディタの環境変えてる人には逆にわかりずらいかな?
まぁいいとして。。。

実行結果
作成されたファイルの中身です。
さっき「保存してください」と言ったのは、ファイルどこに作成されたか、すぐ分かる様にって意味でした。。。

たろの部屋
ファイル操作サンプル

実行後、エクセルブックの置かれたディレクトリを調べてみてください。
Sample.txtという名前のファイルが出来てる筈です。
中を覗くと、上の様な感じになってませんか?
えーと、これは「Openステートメント」を用いた、ファイル作成の方法です。
Openを実行した後、必ず「Closeステートメント」でファイルを閉じてください。
やらないと、あとあとファイルが開きっぱなしとなってしまいます。

えーと、まず引数に「Output」とありますが、これは書き込みを行いたい時はこれを指定します。
最後の引数に#1とありますが、これは開くファイルのファイル番号です。
Openを使ってファイルの操作を行う場合、1コ1コファイル番号を指定しないといけません。
Closeしない限り、同じファイル番号を使う事は出来ないです。


ファイルを読む!

んでば、次にファイルの中身の読み込みをやりましょう。
下のコードを同じプロージャ内で上のコードの後に追加してください。

'変な所で変数宣言
'変数はなるべくプロージャの最初の方で宣言してください

Dim Data(1) As String

'Inputで開く
Open strPath For Input As #1
   Input #1, Data(0)
   Input #1, Data(1)
Close #1

Cells(1, 1).Value = Data(0)
Cells(2, 1).Value = Data(1)

実行結果:


書き込む(もしくは作る)時は「Output」でしたが、読み込む時は「Input」となります。
ファイルの内容は、配列変数Dataにそれぞれ格納しています。

大体こんな感じです。
簡単ですね。
ちなみにInputの時、ファイルが存在しないとエラーが発生します。
Openする前にファイルの存在の有無、もしくはエラー処理ルーチンを作っとくと良いでしょう。

では最後にファイルの削除。
これも簡単です。
前回やった「自作関数」の見本になりそうだったので、関数にしてみました。

Function DelFile(ByVal strPath As String) As Boolean
'ファイル削除関数
On Error GoTo Resume Next 'On Errorステートメント

Kill strPath
If Err.Number Then 'エラー処理ルーチン
    Call MsgBox("ファイル削除失敗", vbOKOnly + vbCritical)
    DelFile = False
    Exit Function
End If


DelFile = True
End Function

実行結果は、引数に与えられたファイルが削除されます。
以下がDelFile関数の呼び出しを追加した最終的なコードです。

Sub MakeFile()
'ファイルを作る
Dim strFileName As String 'ファイル名
Dim strPath        As String 'フルパス

'
'ActiveWorkbook.Path: Excelの機能です。現在ブックが置かれているパスを返します。
'

strFileName = "\Sample.txt"
strPath = ActiveWorkbook.Path & strFileName

'Openステートメント
Open strPath For Output As #1
   Print #1, "たろの部屋"
   Print #1, "ファイル操作サンプル"
Close #1

'変な所で変数宣言
'変数はなるべくプロージャの最初の方で宣言してください

Dim Data(1) As String

'Inputで開く
Open strPath For Input As #1
   Input #1, Data(0)
    Input
#1, Data(1)
Close #1

Cells(1, 1).Value = Data(0)
Cells(2, 1).Value = Data(1)


'"はい""いいえ"の選択のできるMsgBox関数使用例でもあります
If MsgBox("ファイルを削除しますか?", vbYesNo + vbQuestion) = vbYes Then
    Call DelFile(strPath)
End If

End Sub
Function DelFile(ByVal strPath As String) As Boolean
'ファイル削除関数
On Error GoTo Resume Next 'On Errorステートメント

Kill strPath
If Err.Number Then 'エラー処理ルーチン
    Call MsgBox("ファイル削除失敗", vbOKOnly + vbCritical)
    DelFile = False
    Exit Function
End If


DelFile = True
End Function

おぉ!?なんかプログラムっぽいぞ!?
じゃぁ今までのはプログラムじゃなかったんかい・・・(んな事ぁないですよ)。

えーと、一応今回はこれで終わり。
次回はもうちっと高度なファイル操作をしてみましょうか?
おっとっと、そーだ。
最初に書こうと思ってて忘れてましたが、ファイル操作出来るのは、何もOpenステートメントだけとは限りません。
まだまだ先の段階になりますが、FileSystemObjectだとか、WinAPI関数というものを呼び出しても出来ます。
まぁVBからやるんだったら、普通はOpenステートメントですがね。