Excel VBAスタンダード 公式テキスト 13章 ファイルの操作
13-1 テキストファイルの操作
テキストファイルを開く
Open ファイルのパス For 操作モード As ファイル番号
- ファイルのパス:"C:\sample.txt"
- 操作モード
Append
:ファイルに追記- 末尾に追加される
Binary
:ファイルをバイナリモードで開くInput
:ファイルから読み込むOutput
:ファイルに書き込む- 新しいデータで上書きされる
Random
:ファイルをランダムアクセスモードで開く
- ファイル番号
- 任意の数字でよい。このファイル番号で指定した数値で区別する
テキストファイルを閉じる
Close ファイル番号
- Workbooksを閉じるのではない事に注意
Sub Macro1() ' ' Macro1 Macro '何も起きてないように見えるが、ファイルを開いて閉じている Open "C:\Sample.txt" For Input As #1 Close #1 ' End Sub
テキストファイルから1行読み込む
Line Input As ファイル番号 , 変数
Sub Macro1() ' ' Macro1 Macro ' Dim buf As String Open "C:\Sample.txt" For Input As #1 `EOF(ファイル番号) ファイルを最後まで読み込むとTrueになる Do Until EOF(1) Line Input #1, buf MsgBox buf Loop Close #1 ' End Sub
ファイルに書き込む
Print ファイル番号 , データ
Sub Macro1() ' ' Macro1 Macro ' Dim buf As String `上書きのときは `Append`を`Output`に Open "C:\Sample.txt" For Append As #1 Print #1, "hello" Close #1 ' End Sub
ファイルをすべて読み込む
Line Input
で1行ずつ読み込む方法Get #ファイル番号, 読み込み開始位置 ,データを格納する変数名
- Getステートメントを利用して一括書き込み
- 読み込み開始位置を省略すると先頭から
- Getステートメント使うときの制限
- ファイルをBinaryモードで開く必要がある
- データ格納用の変数のサイズと、ファイルのサイズを同一にしなくてはならない。
Filelen ファイル名
:ファイルサイズを取得Space 数値
:スペース(空白文字)
Sub Macro1() ' ' Macro1 Macro ' Dim tmp As String tmp = Space(FileLen("C:\Sample.txt")) Open "C:\Sample.txt" For Binary As #1 Get #1, , tmp Close #1 MsgBox tmp ' End Sub
13-2 ファイルのコピーと移動
FileCopy コピー元ファイル , コピー先ファイル
- 同名ファイルがあった場合、上書き時の確認メッセージは出ない
- コピー先のファイル名を変更してもok
- 移動は?
- 移動のコマンドは無い
- ファイル名を変更するコマンドの引数(変更後のファイル名)のパスを代えてしまえば移動と同じになる
Name 旧ファイル As 新ファイル
Name "C:\Sample.txt" As "C:\Sample2.txt"
13-3 ファイルの削除
Kill ファイル名
- ゴミ箱に入りません。注意。
Kill "C:\Sample2.txt"
13-4 ファイルの存在確認
Dir ファイル名
If Dir("C:\Sample.txt ") = "" Then MsgBox "存在しません" Else MsgBox "存在する!" End If
- なんとワイルドカードも利用可能
Sub Macro1() ' ' Macro1 Macro ' Dim buf As String 'ワイルドカード利用時のDirの挙動に注意 '最初にdirが呼ばれた時は、該当する要素の1つを返す buf = Dir("C:\sample*.txt") Do While buf <> "" MsgBox buf '引数を省略したとき時は、1回目で返していない要素を返す 'ワイルドカードの要素がなくなると、空欄を返す buf = Dir() Loop ' End Sub
13-5 カレントフォルダ
CurDir
:カレントフォルダを返すChDir パス
:カレントフォルダの移動ChDrive ドライブ名
:カレントドライブの移動- ドライブをまたぐ移動はまず、カレントドライブを変更してからカレントフォルダの変更を行う
MsgBox "現在のカレントフォルダは" & CurDir ChDrive "C" ChDir "C:\Bak" MsgBox "現在のカレントフォルダは" & CurDir
13-6 フォルダの操作
MkDir パス
:フォルダをつくるRmDir パス
:フォルダを削除する- フォルダ内にファイルやフォルダが残っていると失敗する
MkDir "C:\SampleFolder" MsgBox "フォルダを作成" RmDir "C:\SampleFolder" MsgBox "フォルダを削除"
お疲れさま
印象深かった
- Perlの勉強と平行しながらだったんで、プログラミング言語でも違うところ、同じところあるんだなぁ、というのが素直な感想
- 配列扱うときに、わざわざ配列の要素数を把握しておかなきゃいけないのは面倒だよなぁ、って思う(Perlの場合は特に意識した事ない)
ReDim
とかLBound
とかUBound
とか
- UserFormだけど、素の部品のままでも自分のセンスが悪い気がして悲しい
- Perlでもそうだけど、もっと早く、もっと10年くらい前に知っていたら、お仕事とかすごい楽だっただろうなぁって。
- ま、今勉強してるのも10年、その先に楽するためと思えば
人をぶん殴れそうな「Excel VBA大辞典」とかって何がおさめられてんだろ
- まぁ、まだまだ奥は深く、VBAの入り口にたっただけだよなぁとか思いまする。