例えばファイルを別名でコピーしたい場合などに、拡張子だけ取り出したい時があります。
拡張子があれば「新規ファイル名+拡張子」でコピーすることができます。
そんな時に使用するVBAを掲載しています。
ここではFunction形式の「ExGetExt」プロシージャーを作成しました。
この元のファイル名を引数にプロシージャーを呼び出せば、拡張子だけを取り出し戻します。
やり方は、Len関数でファイル名の長さ分後ろからループし、Mid関数で一文字づつ「.(ピリオド)」かどうかチェックします。
「.(ピリオド)」が見つかれば、それまでの文字が拡張子になります、
Len関数の構文
Len(string)
Mid関数は、文字列の指定した位置から、指定文字数を取り出す関数です。
Mid関数の構文
Mid(string, start[, length])
- string:対象となる文字列
- start:抜き出す文字の位置を指定
- length:(省略可能)抜き出す文字の長さを指定
省略すると、引数startから後ろの全ての文字列が返ります。
Mid関数を使用した「Excel VBAでフルパスからファイル名のみ取得する」を掲載していますので、参考にしてください。
ファイル名から拡張子を取得するVBA
Excel VBA 呼び出し側
Private Sub CommandButton1_Click()
Dim ext As String
'「xls」が戻ります。
ext = ExGetExt("C:\Documents and Settings\in\My Documents\Book1.xls")
End Sub
Excel VBA 標準モジュールコード
実行順
- Len関数でファイル名の文字数を取り出し、Forでループします。
- 「For 文字数 To 1 Step -1」で、末尾の文字位置からループできます。
- Mid関数で一文字取出し、「.(ピリオド)」かどうかチェックします。
- 「.(ピリオド)」でならば、Mid関数でそれまでの文字列を取り出し、プロシージャーから抜けます。
'拡張子を取得
Private Function ExGetExt(sfina As String) As String
Dim i As Long
Dim s1 As String
ExGetExt = ""
'ファイル名の最後の文字から「.」を探す
For i = Len(sfina) To 1 Step -1
If Mid(sfina, i, 1) = "." Then
'拡張子を取得
ExGetExt = Mid(sfina, i + 1)
Exit For
End If
Next
End Function