第80回.ファイル操作Ⅰ(その他)
VBAではファイル操作するためのステートメントと関数が多数用意されています。
マクロVBAでファイル操作する場合は、これらの用意されたステートメントや関数を使い処理を実現します。
ファイル操作で使う、ステートメントと関数
ChDirステートメント
CurDir関数
MkDirステートメント
RmDirステートメント
Killステートメント
FileCopyステートメント
Nameステートメント
GetAttr関数
SetAttrステートメント
|
ステートメント・関数 |
構文 | 説明 |
| ChDrive | ChDrive drive | 現在のドライブを変更します。 |
| ChDir | ChDir path | 現在のフォルダを変更します。 |
| CurDir | CurDir [(drive)] | 現在のパスを返します。 Driveを省略した場合は、現在のドライブのパスを返します。 |
| MkDir | MkDir path | 新しいフォルダを作成します。 |
| RmDir | RmDir path | 既存のフォルダを削除するステートメントです。 |
| Kill | Kill pathname |
ディスクからファイルを削除します。 |
| FileCopy | FileCopy source, destination | ファイルをコピーします。 |
| Name | Name oldpathname As newpathname | ファイルまたはフォルダの名前を変更します。 必要に応じて他のフォルダにファイルを移動します。 |
| SetAttr | SetAttr pathname, attributes | ファイルの属性を設定します。 |
| GetAttr関数 | GetAttr(pathname) | ファイルまたはフォルダの属性を表す整数を返します。 |
GetAttrのみ関数となっていますが、特に関数とステートメントの違いを意識する必要はありません。
戻り値が必要なものは関数として実装されているという事です。
GetAttrは取得した属性を返すための戻り値が必要な為、関数として実装されています。
しかし実際には、これらは「VBA.FileSystem」のメンバーであるメソッドになります。
(IfステートメントやForステートメントとは根本的に違う種類のものになります。)
Call VBA.FileCopy("d:\test.txt", "d:\test2.txt")
※[VBA.]は省略可能
| 定数 | 値 | 内容 |
| vbNormal | 0 | 標準ファイル |
| vbReadOnly | 1 | 読み取り専用ファイル |
| vbHidden | 2 | 隠しファイル |
| vbSystem | 4 | システム ファイル。 Macintosh では使用できません。 |
| vbVolume | 8 | ボリューム ラベル。この値を指定すると、すべての属性は無効になります。 Macintosh では使用できません。 |
| vbDirectory | 16 | フォルダ |
| vbAlias | 32 | エイリアス ファイル。 Macintosh でのみ使用できます。 |
この値はビット演算に対応するように作成されています。
任意の複数の値を足し算した値は、他の組み合わせと同一になることはありません。
この場合の足し算は論理演算のOrと同等です。
ファイル操作の使用例
現在のドライブは変更されません。
既にフォルダが存在する場合はエラーとなります。
フォルダ内にファイルが残っている場合はエラーとなります。
ファイルが存在しない場合はエラーとなります。
読み取り専用属性ファイルは削除できません。
ファイル"SourceFile"を"DestinationFile"としてコピーします。
"DestinationFile"が既に存在する場合は上書きされます。
ファイル"OldName"の名前を"NewName"に変更します。
"NewName"が既に存在する場合はエラーとなります。
GetAttrは関数なので戻り値が存在します。
前回の、Dir関数と合わせて、各種ファイル操作を実現します。
ファイル操作の実践例
バックアップフォルダは、
元のフォルダ名_bk
ただし、以下のVBAではサブフォルダは考慮していません。
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\")
'フォルダ内のファイルを全削除
On Error Resume Next 'ファイルが存在しない場合の対応
Kill strPath & "_bk\*"
On Error GoTo 0
'個別に削除する場合は以下
'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
ファイル操作関連のステートメントと関数を太字にしています。
VBAコード内にコメントを入れていますが、
処理手順としては以下の順となっています。
・バックアップフォルダの削除
・バックアップフォルダの作成
・バックアップの作成
ファイル操作について
しかし、これらを全て完璧にマスターする必要はありません。
同じテーマ「マクロVBA入門」の記事
第77回.組み込みダイアログ(Dialogs,xlDialogPrint)
第78回.総合練習問題8
第79回.ファイル操作Ⅰ(Dir)
第80回.ファイル操作Ⅰ(その他)
第81回.総合練習問題9
第82回.RangeのResizeプロパティ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10
第88回.並べ替え(Sort)
新着記事NEW ・・・新着記事一覧を見る
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出|SQL入門(2025-11-02)
SQL基礎問題5:複数のマスタテーブルの結合|SQL入門(2025-11-01)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
