【VBA】ファイル名(パス)から拡張子だけを取得する | あじゅWeb

【VBA】ファイル名(パス)から拡張子だけを取得する

エクセルVBAでよく使うコードの備忘録。VBAでファイル名(あるいはパス)から拡張子だけを取得するコード。

スポンサーリンク

事前準備

特になし。

ファイル名から拡張子だけを取得

ファイル名を指定してそこから拡張子だけを取得するサンプルコードです。拡張子は最後の「.」より右側なのでその部分を取得します。一番最後の「.」の場所を取得するためInStrRevという文字列を後ろから検索する関数を使います。文字列を最初から検索すると「test.2.xlsx」みたいなファイル名に対応できないので注意が必要です。

サンプルコード

Public Sub GetExtentionFromFileName()

    '--- ファイル名 ---'
    Dim strFileName As String
    strFileName = "[ファイル名(text.xlsxなど)]"
    
    '--- 拡張子の位置 ---'
    Dim posExt As Long
    posExt = InStrRev(strFileName, ".")
    
    '--- 拡張子を格納する変数 ---'
    Dim strExt As String
    
    If (0 < posExt) Then
        strExt = Right(strFileName, Len(strFileName) - posExt)
    Else
        strExt = ""
    End If
    
End Sub

ファイルパスから拡張子だけを取得する

ファイルパスから拡張子だけを取得する手順もほとんど同じで、ほとんどの場合で上記のコードを流用できます。ただ「ファイル名に拡張子が含まれず」かつ「ファイルパスに「.」が含まれる」場合に変な拡張子を返してしまうのでそこを回避するようにします。ファイルパスが「C:\Users\test.2\filename」みたいなケースです(上記のコードを使うと「2\filename」が返されます)。回避の方法は単純で、まずパスからファイル名を取得し、ファイル名に対して上記のコードを適用します。

サンプルコード

Public Sub GetExtentionFromFilePath()

    '--- ファイルのフルパス ---'
    Dim strFilePath As String
    strFilePath = "[ファイルのパス]"
    
    '--- バックスラッシュの位置 ---'
    Dim pos As Long
    pos = InStrRev(strFilePath, "\")
    
    '--- 拡張子を格納する変数 ---'
    Dim strFileName As String
    
    If (0 < pos) Then
        strFileName = Right(strFilePath, Len(strFilePath) - pos)
    Else
        strFileName = ""
    End If
    
    '--- 拡張子の位置 ---'
    Dim posExt As Long
    posExt = InStrRev(strFileName, ".")
    
    '--- 拡張子を格納する変数 ---'
    Dim strExt As String
    
    If (0 < posExt) Then
        strExt = Right(strFileName, Len(strFileName) - posExt)
    Else
        strExt = ""
    End If
    
End Sub