●概要●
拡張子を取得して、フォルダ内のファイルがExcelのブックかどうかを判定する場合、Right関数を利用して、ファイルのパスから最後の3文字を取得してチェックする方法があります。しかし、Officeの次期バージョンでは、Excelブックの拡張子が「.xls」ではなく「.xlsx」となるようです。この場合、Right関数を単純に利用しては、うまく拡張子を取得できません。
拡張子を取得するには、指定したファイルのパスの一番最後の「.(ピリオド)」の位置を取得し、それ以降の文字列で判定する方法が、より確実です。
特定の文字を文字列の最後から検索し、最初に見つかった文字の位置 (先頭からその位置までの文字数)を取得するには、InStrRev関数を利用します。
構文 InStrRev(StringCheck, StringMatch, [Start], [Compare])
設定項目 内容
StringCheck 検索対象の文字列
StringMatch 検索する文字列
Start 開始位置(省略可)
Compare 比較モード(省略可)
次のサンプルは、GetOpenFilenameメソッドを利用して取得したファイルがExcelのブックかどうかを判定します。InStrRev関数で、取得したファイルのパスから、最後の「.(ピリオド)」の位置を取得します。それを元に、Mid関数を利用して、拡張子のみ取得しています。このとき、拡張子が大文字でも小文字でも判定できるよう、LCase関数を利用して、取得した文字列を全て小文字に変換します。
最後に、取得した拡張子の先頭3文字が「xls」であればExcelのブックであるという判断をし、メッセージを表示します。
●サンプル●
Sub Sample()
Dim targetPath As String
Dim extensionData As String
Dim periodPosition As Long
targetPath = Application.GetOpenFilename()
periodPosition = InStrRev(targetPath, ".")
extensionData = LCase(Mid(targetPath, periodPosition + 1))
If Left(extensionData, 3) = "xls" Then
MsgBox "Excelのブックです"
Else
MsgBox "Excelのブックではありません"
End If
End Sub