エクセル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