ファイルの操作
・テキストファイルの操作
・ファイルのコピーと移動
・フォルダの操作
【ここでのポイント】
以下の説明を一通り読んだ後は、使用例のVBAコードを丸暗記する感じで覚えて下さい。
特にBinaryモードについては細部を気にしたらきりがありません、例文だけで十分です。
これらは、単純に構文を覚えれば試験は問題ないと思います。
あまり複合的な応用を問う問題は作られないだろうという事です。
せいぜい、Dir関数との組み合わせ位だと思います。
テキストファイルの操作
2019/05/15からの「VBAエキスパート」リニューアルに伴い出題範囲から削除されました。
VBAでテキストファイル(CSV等)を扱う時は、
最初に、ファイルを開き、
次に、読込書込みを行い、
最後に、ファイルを閉じます。
ファイルを閉じるには、Closeステートメントを使います。
pathname |
必ず指定します。 |
mode |
必ず指定します。 |
Access |
省略可能です。 |
lock |
省略可能です。 |
filenumber |
必ず指定します。 |
reclength |
省略可能です。 |
mode
Binary : バイナリ モード
Input : 入力モード
Output : 出力モード
Random : ランダム アクセス モード
FreeFile関数
pathname に指定したファイルが存在しない場合、
ファイルを開くときにAppend、Binary、Output、Randomのいずれかのモードが指定されている場合、新規に作成されて開きます。
Closeステートメント
任意のファイル番号を 1 つまたは複数指定します。
省略すると、Open ステートメントで開いたすべてのファイルが閉じられます。
Line Input # ステートメント
filenumber | 必ず指定します。 任意のファイル番号を指定します。 |
varname | 必ず指定します。 バリアント型 (Variant) の変数または文字列型 (String) の変数の名前を指定します。 |
Line Input # ステートメントは、
ファイルからキャリッジ リターン (Chr(13)) または改行コード (Chr(13)) + Chr(10)) の直前までのすべての文字を読み込みます。
改行コード (Chr(13)) + Chr(10)) は、VbCrLf
Get ステートメント
指定項目 | 内容 |
filenumber | 必ず指定します。 任意のファイル番号を指定します。 |
recnumber | 省略可能です。 バリアント型 (内部処理形式 Long の Variant) の値を指定します。 読み込みを始めるレコード番号 (ランダム アクセス モード) や バイト位置 (バイナリ モード) を指定します。 |
varname | 必ず指定します。 読み込んだデータを格納する変数名を指定します。 |
Get ステートメントを使用して読み込んだデータは Put ステートメントを使用して書き込みます。
読み込まれるデータは、この変数の長さ以下になります。
従って、Getステートメントの実行前に、
この変数を読み込むデータ長と同じ長さにしておく必要があります。
このような方法が必要な時は、FileSystemObjectを使うのが一般的です。
構文だけを覚えれば良いでしょう。
EOF 関数
ブール型 (Boolean) の値の真 (True) を含む整数型 (Integer) の値を返します。
読み込み位置がファイルの末尾に達していないかどうかを確かめるために使用します。
使用例.
Sub sample()
Dim i As Long
Dim FileNumber
Dim InputData
FileNumber = FreeFile
Open "C:\TEST.txt" For Input As #FileNumber
i = 1
Do While Not EOF(FileNumber)
Line Input #FileNumber, InputData
Cells(i, 1) = InputData
i = i + 1
Loop
Close #FileNumber
End Sub
以下は、FreeFile関数を使わない書き方になります。
Sub sample()
Dim i As Long
Dim InputData
Open "C:\TEST.txt" For Input As #1
i = 1
Do While Not EOF(1)
Line Input #1, InputData
Cells(i, 1) = InputData
i = i + 1
Loop
Close #1
End Sub
上記では、テキストファイル"C:\TEST.txt"から、1行ずつデータを読み込み、
ワークシートのA列に出力しています。
Sub sample3()
Dim sTmp As String
Dim InputData
sTmp = Space(FileLen("C:\TEST.txt"))
Open "C:\TEST.txt" For Binary As #1
Get #1, , sTmp
Close #1
End Sub
上記では、テキストファイル"C:\TEST.txt"から、データを一括で取得し、
A1セルに出力しています。
Print # ステートメント
filenumber | 必ず指定します。 任意のファイル番号を指定します。 |
||||||||
outputlist | 省略可能です。 出力する式や数式または文字列式を指定します。 [{Spc(n) | Tab[(n)]}] [expression] [charpos]
|
引数 outputlist を省略し、引数 filenumber の後ろに区切り記号だけを指定すると、ファイルに空白行を出力します。
日付型 (Date) のデータは、コントロール パネルで設定した短い形式で書き込まれます。
Sub sample()
Dim i As Long
Dim FileNumber
FileNumber = FreeFile
Open "C:\TEST.txt" For Output As #FileNumber
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Print #FileNumber, Cells(i, 1)
Next
Close #FileNumber
End Sub
上記では、ワークシートのA列のデータを、
テキストファイル"C:\TEST.txt"に書き出しています。
ファイルのコピーと移動
VBAではファイル操作するためのステートメントと関数が用意されています。
VBAでファイル操作する場合は、これらの用意されたステートメントや関数を使い処理を実現します。
ステートメント・関数 |
構文 | 説明 |
Kill | Kill pathname |
ディスクからファイルを削除します。 |
FileCopy | FileCopy source, destination | ファイルをコピーします。 |
Name | Name oldpathname As newpathname |
ファイルまたはフォルダの名前を変更します。 必要に応じて他のフォルダにファイルを移動します。 |
使用例.
ファイルが存在しない場合はエラーとなります。
FileCopy "SourceFile", "DestinationFile"
ファイル"SourceFile"を"DestinationFile"としてコピーします。
"DestinationFile"が既に存在する場合は上書きされます。
Name "OldName" As "NewName"
ファイル"OldName"の名前を"NewName"に変更します。
"NewName"が既に存在する場合はエラーとなります。
Dir関数との組み合わせ
Sub sample()
If Dir("c:\user\test.txt") <> "" Then
FileCopy "c:\user\test.txt", "c:\user\test2.txt"
End If
If Dir("c:\user\test.txt") <> "" Then
Kill "c:\user\test.txt"
End If
If Dir("c:\user\test.txt") = "" And _
Dir("c:\user\test2.txt") <> "" Then
Name "c:\user\test2.txt" As "c:\user\test.txt"
End If
End Sub
FileCopyでは、コピー元ファイルの存在
Killでは、削除するフアイルの存在確認
Nameでは、移動元が存在し、異動先が存在しない事の確認
フォルダの操作
VBAでフォルダ操作する場合は、これらの用意されたステートメントや関数を使い処理を実現します。
ステートメント・関数 |
構文 | 説明 |
ChDrive | ChDrive drive | 現在のドライブを変更します。 |
ChDir | ChDir path | 現在のフォルダを変更します。 |
MkDir | MkDir path | 新しいフォルダを作成します。 |
RmDir | RmDir path | 既存のフォルダを削除するステートメントです。 |
使用例.
ChDir "D:\WINDOWS\SYSTEM"
現在のドライブは変更されません。
MkDir "MYDIR"
既にフォルダが存在する場合はエラーとなります。
RmDir "MYDIR"
フォルダ内にファイルが残っている場合はエラーとなります。
ファイル操作の実践例
バックアップフォルダは、
元のフォルダ名_bk
Sub sample()
Dim strPath As String
Dim strFileName As String
'フォルダの選択
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "D:\user"
.AllowMultiSelect = False
.Title = "フォルダの選択"
If .Show = True Then
strPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
'バックアップフォルダの削除
If Dir(strPath & "_bk", vbDirectory) <> "" Then
strFileName = Dir(strPath & "_bk\")
Do While strFileName <> ""
Kill strPath & "_bk\" & strFileName
strFileName = Dir()
Loop
RmDir strPath & "_bk\"
End If
'バックアップフォルダの作成
MkDir strPath & "_bk"
'バックアップの作成
strFileName = Dir(strPath & "\")
Do While strFileName <> ""
FileCopy strPath & "\" & strFileName, strPath & "_bk\"
& strFileName
strFileName = Dir()
Loop
End Sub
ファイル操作関連のステートメントと関数を太字にしています。
処理手順としては以下の順となっています。、
・バックアップフォルダの削除
・バックアップフォルダの作成
・バックアップの作成
【業務改善の実務】
Excelで最も良く使うテキストファイルのCSVは、文字コードも多種で単純なコードでは済まない場合が多々あります。
CSVに関しては、下記の参考ページのコードを流用すれば良いでしょう。
毎回新たにVBAコードを書いていたのでは大変です。
自分なりに、流用できるVBAを集めておくという事も、VBA開発においては重要です。
使い方が少々面倒になりますが、より汎用性のある、
FileSystemObject
こちらも必ず使えるようにしておいてください。
【本サイト内の関連ページ】
第116回.ファイル操作Ⅱ(OpenとClose)
第119回.ファイルシステムオブジェクト(FileSystemObject)
CSVの読み込み方法
VBAエキスパート公式テキスト
こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。
同じテーマ「VBAエキスパート対策」の記事
プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
APIとOLEオートメーション
変数と配列
レジストリの操作
ファイルの操作
ユーザーフォームとメニューの操作
VBAスタンダード試験対策まとめ
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA入門編
- VBAエキスパート対策
- ファイルの操作
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。