VBA を使用してファイルが存在するかどうかを確認する
-
Dir()
関数を使用して、VBA を使用してファイルがコンピューターに存在するかどうかを確認する -
Dir()
関数にワイルドカードを導入して、VBA を使用してコンピューターにファイル/ S が存在するかどうかを確認する - VBA を使用してコンピューターに存在するすべての名前を取得/カウント
VBA は、特にデスクトップソフトウェア開発を扱う場合に、強力なコンピュータープログラミング言語です。VBA の優れた点の 1つは、コンピューター上のファイルと通信して操作する能力です。
このチュートリアルでは、特定のファイルが特定のパスに存在するかどうかを確認する方法を示します。これは、特にファイルへのアクセスや操作を処理する場合に、一般的に実行する必要のあるロジックです。
先に進む前に、最初にファイルが存在するかどうかを確認することをお勧めします。これは、プログラム全体がクラッシュする原因となるシステムエラーの発生を防ぐためです。
Dir()
関数を使用して、VBA を使用してファイルがコンピューターに存在するかどうかを確認する
以下のコードブロックは、Dir()
関数を使用してファイルが存在するかどうかを確認する方法を示しています。Dir()
関数は、ファイルパスを使用してフォルダ名とファイル名を取得するための強力なツールです。以下のコードブロックには、fileToCheck
パラメータを持つサブルーチンが含まれています。パラメータとして fileToCheck
を使用して、CheckFileExistence
サブルーチンを呼び出すことができます。fileToCheck
パラメータは、存在を確認するファイル名またはフォルダ名になります。
構文:
Dir([pathname],[attributes])
パラメーター:
[pathname] |
オプション。チェックするフォルダ名、ファイル名、またはファイルパス |
[attributes] |
オプション。いくつかの属性を指定し、Dir() 関数はそれらの属性に基づいてファイル名を返します |
[属性]
については、以下の定義を参照してください。
vbNormal |
(デフォルト)属性のないファイルを指定します。 |
vbReadOnly |
属性のないファイルに加えて、読み取り専用ファイルを指定します。 |
vbHidden |
属性のないファイルに加えて、隠しファイルを指定します。 |
vbDirectory |
属性のないファイルに加えて、ディレクトリまたはフォルダを指定します。 |
vbSystem |
属性のないファイルに加えて、システムファイルを指定します。Macintosh では利用できません。 |
Sub CheckFileExistence(fileToCheck as String)
Dim FileName As String
FileName = Dir(fileToCheck,vbNormal)
If FileName <> "" Then
MsgBox "File Exists"
Else
MsgBox "File Doesn't Exist"
End If
End Sub
Sub test1()
Call CheckFileExistence("Book1.xlsx")
test1
出力:
File Exists
ファイル Book1.xlsx
は、コンピューターの任意のフォルダーにある可能性があることに注意してください。Dir()
関数の良いところは、コンピューター上のすべてのフォルダーの可能な場所にあるファイルをチェックすることです。
したがって、結果がファイルが存在しません
の場合、ファイル名はコンピューター上のどのフォルダーまたはファイルでも使用されていません。
Dir()
関数にワイルドカードを導入して、VBA を使用してコンピューターにファイル/ S が存在するかどうかを確認する
さらに、Dir()
関数では、引数にワイルドカードを使用できます。必要な正確なファイル名、フォルダー名、およびファイルパスがわからない場合は、これらのワイルドカードを使用してファイルを検索できます。
以下のリストは、Dir()
関数によって受け入れられるワイルドカードです。
? (疑問符) |
任意の 1 文字を意味します。文字でも数字でもかまいません |
* (アスタリスク) |
これは、行内の任意の数の文字を表します。 |
例:
この vba コードブロックは、xlsx
ファイルタイプのファイルがあるかどうかをチェックします。したがって、xlsx
検索ファイル名を使用します。
Sub CheckFileExistence(fileToCheck as String)
Dim FileName As String
FileName = Dir(fileToCheck,vbNormal)
If FileName <> "" Then
MsgBox "File Exists"
Else
MsgBox "File Doesn't Exist"
End If
End Sub
Sub test2()
Call CheckFileExistence("*.xlsx")
End Sub
test2
出力:
File Exists
以下の vba コードは、ファイル名がどのファイルタイプでも 2 文字しかないファイルがあるかどうかをチェックします。したがって、ファイル名の検索には ??.*
を使用します。
Sub CheckFileExistence(fileToCheck as String)
Dim FileName As String
FileName = Dir(fileToCheck,vbNormal)
If FileName <> "" Then
MsgBox "File Exists"
Else
MsgBox "File Doesn't Exist"
End If
End Sub
Sub test3()
Call CheckFileExistence("??.*")
End Sub
test3
出力:
File Exists
VBA を使用してコンピューターに存在するすべての名前を取得/カウント
上記のコードブロックは、これらのファイルに関する情報を取得せずに、ファイルの存在を検出しているだけです。以下のコードブロックでは、検索名の文字列と一致するすべての既存のファイルを一覧表示します。
以下のコードブロックの場合、出力は、ファイル名が 1〜4 文字の長さのすべての .xlsx
ファイルのファイル名(.xlsx
)になります。
Sub ListAllFiles(fileToCheck As String)
Dim FileName As String
FileName = Dir(fileToCheck, vbNormal)
Do While FileName <> ""
Debug.Print FileName
FileName = Dir()
Loop
End Sub
Sub test4()
Call ListAllFiles("????.xlsx")
End Sub
test4
出力:
ATIC.xlsx
CS.xlsx
Data.xlsx
EA65.xlsx
edge.xlsx
fe10.xlsx
FV3P.xlsx
G!.xlsx
GZ7P.xlsx
HE6P.xlsx
IF.xlsx
IF27.xlsx
Lot.xlsx
SR.xlsx
Test.xlsx
WOP.xlsx
最後に、以下のコードブロックは、検索名の文字列と一致するすべての既存のファイルをカウントします。
以下のコードブロックの場合、出力は、ファイル名が 1〜4 文字の長さ(.xlsx
)であるすべての .xlsx
ファイルの数になります。
Sub CountAllFiles(fileToCheck As String)
Dim FileName As String
Dim fileCnt As Long
FileName = Dir(fileToCheck, vbNormal)
Do While FileName <> ""
fileCnt = fileCnt + 1
FileName = Dir()
Loop
Debug.Print "There are " & fileCnt & " existing files matched with the criteria."
End Sub
Sub test5()
Call CountAllFiles("????.xlsx")
End Sub
test5
出力:
There are 16 existing files matched with the criteria.