ファイルのフルパスからファイル名のみを取得 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」テキスト モードで比較を行います。
テキストモードは全角半角・大文字小文字の区別をしません
fn = Split(pt, "¥")

第1引数の「区切り文字を含む文字列(Expression)」は、変数「pt」にセットしている

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

という文字列式になります。

第2引数の「区切り文字列(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次元配列なので、第2引数の「添え字の上限を調べたい配列の次元(Dimension)」は省略しています。

添え字は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)
CreateObject(“Scripting.FileSystemObject”) を使ってサブフォルダを取得
再帰処理とは?フォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
指定したフォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
再帰処理とは?フォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
参照渡し「ByRef」と値渡し「ByVal」の違い(Excel VBA)
ファイルのフルパスからファイル名のみを取得 InStrRev関数(Excel VBA)
指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
FileSystemObjectとは?CreateObject 関数 FolderExists・GetFolderの使い方
FileSystemObject CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止
再帰処理とは?指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
ファイルのフルパスからファイル名のみを取得 Split関数(Excel VBA)
Callステートメントとは 引数 括弧()の使い方(Excel VBA)
指定したフォルダ内から「特定の文字を含まないファイル名」を取得(Excel VBA)
ワイルドカードとは。使い方いろいろ。(Excel)
Dir関数の使い方。ファイル名やフォルダ名の取得方法。(Excel VBA)
指定したフォルダのファイル名を取得し、そのファイル名を一括で変換(Excel VBA)
Excel起動時に「コンパイルエラー」。64ビット システムで Declareステートメントに、PtrSafe属性を設定(Excel VBA )
「ファイルを開く」ダイアログボックス から ファイル名を取得(Excel VBA)
「ファイルを開く」ダイアログボックス から 複数 ファイル名を取得(Excel VBA)
指定フォルダ内のサブフォルダ全てをフォルダ構成のみ(空フォルダ)を別フォルダにコピー(Excel VBA)
再帰処理とは?指定フォルダ内のサブフォルダ全てをフォルダ構成のみ(空フォルダ)を別フォルダにコピー(Excel VBA)

■スポンサーリンク

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