VBA Dir関数-ファイルデータを取得し、ファイルが存在するかどうかを判定する

Dir関数

Stringを返し、ファイル名、ディレクトリ名、またはフォルダ名を表示します。指定されたパターンまたはファイルのプロパティ、あるいはディスクボリュームラベルと一致する必要があります。

構文

Dir[(pathname[, attributes])]

次にはDir関数の引数を説明します

引数説明
pathname省略可能です。ファイル名やフォルダ名を表す文字列式を指定します。ディレクトリまたはフォルダ、およびドライブが含まれるかもしれません。pathnameが見つからない場合は、長さは0の文字列(“”)が返されます。
attributes省略可能です。取得するファイルの属性を表す数式もしくは定数を指定します。省略した場合、pathnameに一致するプロパティが含まれないファイルを返します。

値を設定する

引数attributesを次の値を設定できます。

定数説明
vbNormal0標準ファイル
vbReadOnly1読み取り専用ファイル
vbHidden2隠しファイル
VbSystem4システムファイル(Macintoshでは使用できません)
vbVolume8ボリュームラベル(Macintoshでは使用できません)
vbDirectory16フォルダ
vbAlias64エイリアスファイル(Macintoshでのみ使用できます)

注意点: これらの定数はVBAによって指定されます。プログラムコードの任意の位置にこれらの定数を入力して、元の数値を置き換えます。

説明

Microsoft Windowsでは、Dirは複数のファイルを指定するために複数文字(*)および単一文字(?)のワイルドカードをサポートします。

Macintoshでは、これらの文字は有効なファイル名の文字であり、複数のファイルを指定するためのワイルドカードとして使用することはできません。

Macintoshはワイルドカードをサポートしていないため、ファイルタイプを使用してファイルグループを指定します。 MacID関数を使用して、ファイル名の代わりにファイルタイプを指定できます。 例えば、次のステートメントは、現在のフォルダー内の最初のTEXTファイルの名前を返します。

Dir("SomePath", MacID("TEXT"))

選択したフォルダ内のすべてのファイルに空の文字列を指定します。

Dir("")

Microsoft Windowsでは、Dir関数にMacID関数を使用すると、エラーが発生します。

256を超えるattribute値は、MacID関数の値と見なされます。

Dir関数を初めて呼び出すときは、pathnameを指定する必要があります。指定しないと、エラーが発生します。 ファイルプロパティも指定する場合は、pathnameを含める必要があります。

Dirは、pathnameと一致する最初のファイル名を返します。 pathnameと一致する他のファイル名を取得する場合は、引数を使用せずにDirを再度呼び出します。 条件を満たすファイルがない場合、Dirは長さが0の文字列(“”)を返します。 返す値は長さが0の文字列であり、Dirが再度呼び出される場合は、pathnameを指定する必要があります。指定しないと、エラーが発生します。 現在のpathnameと一致するすべてのファイル名にアクセスせずに、新しいpathnameに変更できます。 ただし、Dir関数を再帰的に呼び出すことはできません。 vbDirectoryプロパティを使用してDirを呼び出すと、サブディレクトリを継続的に返すことはできません。

ヒント:ファイル名は特別な順序で返されないため、ファイル名を配列に保存してから、配列を並べ替えることができます。

次にはDir関数の例を挙げます

1、ファイルが存在するかどうかを判定する

a = Dir("D:\OfficeSetup")
If a = "" Then
MsgBox "存在しない"
Else
MsgBox "存在する"
End If

ファイルが存在する場合、aはファイル名OfficeSetupを返し、そうでない場合は空白を返します。

Dir関数に基づき、いくつかのカスタム関数を紹介します。

2、ファイルが存在するかどうかを判定するには、fname引数は完全なパスを入力する必要があります。(ファイル名を含む)

Private Function FileExists(fname) As Boolean
' ファイルが存在する場合、TRUEを返す
Dim x As String
x = Dir(fname)
If x <> "" Then FileExists = True _
Else FileExists = False
End Function

3、パスからファイル名を返します

Private Function FileNameOnly(pname) As String
' 返回文件名稱
Dim temp As Variant
Length = Len(pname)
temp = Split(pname, Application.PathSeparator)
FileNameOnly = temp(UBound(temp))
End Function
Private Function FileNameOnly(pname) As String
' ファイル名を返す
Dim temp As Variant
Length = Len(pname)
temp = Split(pname, Application.PathSeparator)
FileNameOnly = temp(UBound(temp))
End Function

4、パスが存在するかどうかを判定し、Trueを返します

Private Function PathExists(pname) As Boolean
‘ パスが存在する場合は、パスを返す
If Dir(pname, vbDirectory) = “” Then
PathExists = False
Else
PathExists = (GetAttr(pname) And vbDirectory) = vbDirectory
End If
End Function

5、ワークブックが開いているかどうかを確認します

Private Function WorkbookIsOpen(wbname) As Boolean
‘ 開いている場合はTrueを返す
Dim x As Workbook
On Error Resume Next
Set x = Workbooks(wbname)
If Err = 0 Then WorkbookIsOpen = True _
Else WorkbookIsOpen = False
End Function

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です