ファイルのフルパスからファイル名のみを取得 Split関数(Excel VBA)

【本日のミッション】

ファイルのフルパス

「C:\VBA\第1階層\第2階層1\第3階層1\File31_1.xlsx

から Split関数 を使用して、ファイル名部分の「File31_1.xlsx」のみを取得せよ。

色々なデータを扱っていると、こういう場面によく出くわします。

パス名・・・長いねん!!

どんだけ深い階層までフォルダ作っちゃってるの!!

ここでは、「Split関数」という関数を使用してファイル名を取り出す方法をご紹介します。

(InStrRev関数を使用する場合:ファイルのフルパスからファイル名のみを取得 InStrRev関数(Excel VBA)

長いパス、頭から見ると長くてややこしいテキストですが、「\」で区切ってみてください

C:\VBA\第1階層\第2階層1\第3階層1\File31_1.xlsx

\」で区切られたフォルダ名やファイル名は、個別にみるとわかりやすいですよね。
\」を区切り文字として利用し、ファイル名を取得しましょう!

Sub フルパスからファイル名のみ取得()
    '【変数】
    Dim Pt As String  'ファイルパス
    Dim fn As Variant 'ファイル名配列
    
    '■ファイル名の取得
    Pt = "C:¥VBA¥第1階層¥第2階層1¥第3階層1¥File31_1.xlsx"     'ファイルパス指定
    fn = Split(Pt, "¥")   'ファイル名配列
    MsgBox fn(UBound(fn))

End Sub

「フルパスからファイル名のみ取得」プロシージャのどこかにカーソルを置いてF5キーをクリックしてください。

ファイル名だけが取得できましたね♪

■Split関数

Split関数はある文字列(Expression)を、指定した区切り文字(Delimiter)で分割した 1 次元配列を返します。

Split (Expression [, Delimiter] [, Limit] [, Compare])

引数名 説明 省略
Expression 区切り文字を含む文字列式を指定します。 ×
Delimiter 文字列を区切る、区切り文字を指定します。
省略すると、区切り文字にスペース (” “) が使用されます。
Limit 返す配列の要素数を指定します。
-1(既定値)にすると、全ての文字列を含んだ配列を返します。
Compare 文字列式を比較するモードを指定します。
省略すると、Option Compareステートメントの設定で比較します。
「vbBinaryCompare」バイナリ モードで比較を行います。
「vbTextCompare」テキスト モードで比較を行います。
テキストモードは全角半角・大文字小文字の区別をしません

Split(Pt, “¥”)

区切り文字を含む文字列(Expression)は変数「Pt」にセットした

C:¥VBA¥第1階層¥第2階層1¥第3階層1¥File31_1.xlsx

区切り文字列(Delimiter)は

\

です。

C:\VBA\第1階層\第2階層1\第3階層1\File31_1.xlsx

が区切り文字「\」で区切られ、配列「fn」に格納されると下記の通りになります。

■UBound関数

配列(ArrayName)で使用できる最大の添え字を返します。

UBound (ArrayName [, Dimension])

引数名 説明 省略
ArrayName 配列変数の名前を指定します。 ×
Dimension 添え字の上限を調べたい配列の次元を指定します。
省略すると、1 次元とみなされます。

UBound(fn)

上記Split関数で配列fnには、fn(0)~fn(5)までの要素が入っています。
「添え字」とは配列fn()の括弧内の数字のことです。
今回は1次元配列なので、引数は省略されています。

添え字は0~5なので、最大値は UBound(fn)=5 になります。

fn(UBound(fn))=fn(5)=File31_1.xlsx

これでファイル名「File31_1.xlsx」のみ取り出すことができます(#^.^#)

【参考】
指定したフォルダ内のファイル名全てを取得(Excel VBA)
変数でよく使われる「buf」「tmp」の意味
Dir関数が取得するファイルの順番
指定したフォルダ内のフォルダ名全てをGetAttrを使って「エラー53 ファイルが見つかりません。」を出さずに取得(Excel VBA)
GetAttrとは?「= vbDirectory」ではなく「And vbDirectory」となるビット演算の疑問
フォルダ名だけを取得したい時に出てくる 「.」 と 「..」 とは?
指定したフォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
再帰処理とは?フォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
指定したフォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
参照渡し「ByRef」と値渡し「ByVal」の違い(Excel VBA)
Callステートメントとは
再帰処理とは?フォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
FileSystemObjectとは?CreateObject 関数 FolderExists・GetFolderの使い方
FileSystemObject CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止
再帰処理とは?指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
指定したフォルダ内から「特定の文字を含まないファイル名」を取得(Excel VBA)

■スポンサーリンク

■ランキングに参加しています。
↓このブログを気に入っていただけましたら、ポチッとお願いします。
にほんブログ村 IT技術ブログへ
にほんブログ村