ファイルを開く
Open pathname For mode [ Access access ] [ lock ] As [ # ] filenumber [ Len = reclength ]pathname | : ファイルパス |
mode | : ファイルモード (Append、Binary, Input, Output, Random) |
access | : ファイル操作制限 (Read, Write, Read Write) |
lock | : 他のプロセスからの操作制限 (Shared, Lock Read, Lock Write, Lock Read Write) |
filenumber | : ファイル番号 (1~511) |
reclength | : レコード長 |
pathname で指定したファイルが存在しない場合、mode が Input 以外であれば新規ファイルが作成される。
filenumber は FreeFile 関数で使用可能な番号を取得できる。もしくは直接指定。
ファイルを閉じる
Close [ filenumberlist ]filenumberlist | : ファイル番号 |
filenumberlist を省略した場合は、Open ステートメントで開いたすべてのアクティブなファイルが閉じられる。
複数ファイル指定したい場合は、close #1, #2 のように , で区切る。
ファイルに書き込む
ファイルへの書き込みは Print を使用する。Print #filenumber, [ outputlist ]
outputlist は書き込みたい文字列。省略した場合は空行となる。
Dim filePath As String
Dim fileNum As Integer
'ファイルパス
filePath = ThisWorkbook.Path & "\" & "test.txt"
'ファイル番号を取得
fileNum = FreeFile
'ファイルを開く
Open filePath For Output As #fileNum
'ファイルに出力
Print #fileNum, "aaaa" '1行目
Print #fileNum, '2行目 (改行のみ)
Print #fileNum, "bbbb"; '3行目 (改行なし)
Print #fileNum, "cccc" '3行目
'ファイルを閉じる
Close #fileNum
上記で作成した test.txt の中身は以下のようになる。test.txt
aaaa
bbbbcccc
ファイルを読み込む
開いたファイルを1行ずつ読み込むには Line Input を使用する。以下の例では Do While - Loop を使って行末 (EOF) を検出するまで繰り返す。Line Input #filenumber, varname
Dim filePath As String, str As String
Dim fileNum As Integer
'ファイルパス
filePath = ThisWorkbook.Path & "\" & "test.txt"
'ファイル番号を取得
fileNum = FreeFile
'ファイルを開く
Open filePath For Input As #fileNum
'ファイルを読み込む
Do While Not EOF(fileNum)
Line Input #fileNum, str
Debug.Print str
Loop
'ファイルを閉じる
Close #fileNum
上記の ファイル書き込み → 読み込み をした実行結果
aaaa
bbbbcccc
ファイルのコピー
テキストファイルをコピーするサンプル。コピー先のファイルが既に存在する場合は上書きされる。Dim srcFile As String, dstFile As String
srcFile = ThisWorkbook.path & "\" & "aaa.txt" 'コピー元ファイル
dstFile = ThisWorkbook.path & "\" & "bbb.txt" 'コピー先ファイル
FileCopy srcFile, dstFile
ファイルの削除
テキストファイルを削除するサンプル。Dim filePath As String
'ファイルパス
filePath = ThisWorkbook.Path & "\" & "*.txt"
'ファイル削除
If Dir(filePath, vbNormal) <> "" Then
Kill filePath
Else
Debug.Print "テキストファイルはありません。"
End If
ディレクトリの追加
既に同じ名前のディレクトリがあった場合を考慮し、ディレクトリの存在確認を行うこと。Dim dirPath As String, str As String
'ディレクトリパス
dirPath = ThisWorkbook.Path & "\dir_name"
'ディレクトリチェック & 作成
If Dir(dirPath, vbDirectory) = "" Then
MkDir dirPath
Else
Debug.Print "ディレクトリが存在します。"
End If
ディレクトリの削除
ディレクトリの中にファイルがあると削除できないようなので、先に Kill を使って削除しておく。Dim dirPath As String
'ディレクトリパス
dirPath = ThisWorkbook.Path & "\dir_name"
'ディレクトリ削除
If Dir(dirPath, vbDirectory) <> "" Then
Kill dirPath & "\" & "*" 'ディレクトリ内のファイルを空にする
RmDir dirPath
End If
ディレクトリの下にサブディレクトリが存在したりする場合は、FileSystemObject を使用するのが簡単そう。
前準備として、メニューバーから ツール → 参照設定 を選択し、Microsoft Scripting Runtime にチェックを入れておく。
'FileSystemObject の作成
Dim fso As FileSystemObject
Set fso = New FileSystemObject
'ディレクトリパス
Dim dirPath As String
dirPath = ThisWorkbook.Path & "\dir_name"
'ディレクトリ削除
Call fso.DeleteFolder(dirPath, True)
'クリア
Set fso = Nothing
CSVファイルを読み込む
Workbooks.Open を使って CSV ファイルを開く方法が一般的なやり方だと思っていたが、調べてみると色々なやり方があるらしい。私の場合は別の言語で CSV 化したファイルをエクセルで確認する (CSV ファイル自体の編集はしない) ことが多く、以下の方法で行っている。
Dim answer As Long 'MsgBox応答
Dim filePath As String 'ファイルパス
Dim newSheetName As String '新規シート名
'メッセージボックスを表示 (キャンセル時は終了)
answer = MsgBox("CSV ファイルを選択してください。", vbOKCancel, "確認")
If (answer <> 1) Then
Exit Sub
End If
'ダイアログボックスを表示 (キャンセル時は終了)
filePath = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv")
If (filePath = "False") Then
Exit Sub
End If
'新規シート名 (CSV ファイル名) を取得
newSheetName = Dir(filePath)
newSheetName = Replace(newSheetName, ".csv", "") '拡張子は削除
'新規シート名と同じ名前のシートが存在する場合は古いシートを一旦削除
For Each check_sheet In ThisWorkbook.Worksheets
If (check_sheet.Name = newSheetName) Then
Application.DisplayAlerts = False '確認メッセージを出さないようにする
Worksheets(newSheetName).Delete
Application.DisplayAlerts = True
End If
Next
'新規シート作成 (シートの位置は左端)
Worksheets.Add Before:=Sheets(1)
ActiveSheet.Name = newSheetName 'シート名指定
'CSV ファイルを開く -> 新規シートにコピー -> CSV ファイルを閉じる (保存はしない)
Workbooks.Open Filename:=filePath
ActiveSheet.Cells.Copy ThisWorkbook.Sheets(newSheetName).Cells
ActiveWorkbook.Close savechanges:=False
0 件のコメント:
コメントを投稿