即効テクニック

ファイル操作関連のテクニック

拡張子を確実に取得する

(Excel 2000/2002/2003)
●概要●
拡張子を取得して、フォルダ内のファイルが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