VBA|ThisWorkbookのファイル名(Name)を 拡張子なしで取得する方法

エクセルVBA VBAでフォルダ・ファイルの操作



マクロを使うと、ThisWorkbookのブック名を取得しなければならない場合が多々あります。

さて、VBAでThisWorkbookのブック名を「拡張子なし」で取得するにはどのようにすればよいのでしょうか?

今回は、ブックの名前を「拡張子なし」で取得する方法について徹底的に説明していきます。



ThisWorkbookのファイル名(Name)を 拡張子なしで取得する方法

ブックの名前を取得するには

ブックの名前を取得するには、Nameプロパティを使います。

構文: Workbookオブジェクト. Name

現在使用しているブック(ThisWorkbook)の名前を取得するには、

ThisWorkbook. Name

となります。

Sub ブック名を取得()
    MsgBox ThisWorkbook.Name
End Sub

当然、ブックの名前に拡張子が付いています。

次項目ではファイル名の拡張子が無い状態で表示させてみましょう。

ファイル名(Name)を 拡張子なしで取得する方法

ファイル名を拡張子無しで取得するには、ファイル名を取得して、取得したファイル名から拡張子を削除すればよいのです。

ファイル名を取得するには、先ほどのNameプロパティを使います。

Nameプロパティで取得したファイル名について、「Left関数」と「Len関数」を使って拡張子を削除した状態にします。

Left関数とLen関数についての説明はひとまず後回しにして、ファイル名を拡張子無しで取得するコードを見てみましょう。

Sub ブック名を拡張子無しで取得()
    MsgBox Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5)
End Sub
拡張子が無い状態で取得できる

拡張子が無い状態で取得できます。

コードの解説をしていきます。

・Left関数

構文: Left(String, Length)

⇒ 日本語訳: Left(指定された文字列, 取り出す文字数)

引数「String」に指定された文字列の左側から、引数「Length」に指定された文字数だけ文字列を取り出します。

・Len関数

構文: Len(Expression)

⇒ 日本語訳: Len(文字数をカウントしたい文字列)

Len関数は、引数「Expression」に指定した文字列の文字数を返します。

ちなみに、Expressionとは和訳すると「式」という意味です。

これらの関数を踏まえて、もう一度コードを見てみましょう。

Sub ブック名を拡張子無しで取得()
    MsgBox Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5)
End Sub

今回のブック名を「VBA入門.xlsm」とすると、

Len(Thisworkbook. Name)で、ブックの文字数を「10文字」とカウントします。

Len(ThisWorkbook.Name) – 5 で、拡張子(.xlsm)分の「5文字」を引きます。

※ ブックのファイル名の拡張子は「.xlsx」や「.xlsm」等の「 . 」を含めて5文字の拡張子になっています。

Left(ThisWorkbook.Name,~) で、拡張子の文字数を差し引いたファイル名を取得します。

【まとめ】ThisWorkbookのファイル名(Name)を 拡張子なしで取得する方法

ThisWorkbookのファイル名を拡張子無しで取得するには、

Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) – 5)

というコードになります。

エクセルでは、拡張子無しでファイル名を取得することが少なくありませんので、今回の記事をぜひ活用してくだいね。

参考:Excel VBA入門 その80:Dir関数で、ファイルがあるのに見つからないときの対処方法

コメント

タイトルとURLをコピーしました