【2026年8月最新】VBAでファイル名を取得する4つの方法|非エンジニアのためのDir関数・FileSystemObject入門

【2026年7月最新】VBAでファイル名を取得する4つの方法|非エンジニアのためのDir関数・FileSystemObject入門

「請求書ファイルの名前だけをVBAで取り出したい」「フォルダの中の全ファイル名を一覧化したい」——経理・総務・営業事務の現場で、こうしたニーズは驚くほど頻繁に発生します。

VBA(Visual Basic for Applications)でファイル名を取得する方法は、実は1つではありません。「自分自身のファイル名を取りたいのか」「別のファイルパスから名前だけ抜き出したいのか」で使うべき関数が変わり、さらに存在チェックや一覧取得まで含めると、覚えるべきパターンは合計4種類にもなります。

この記事では、Excel VBAで日常的に使われる「ファイル名取得」の全パターンを、コード例つきで整理します。加えて、「そもそもVBAを書かなくても同じことができるのか」という、非エンジニアの経営者・管理職が本当に気にしているはずの問いにも、弊社(株式会社GENAI)の実運用データをもとにお答えします。

代表菅澤 代表菅澤
VBAは20年以上前からある技術ですが、いまだに経理・総務の現場で現役です。ただ、正直に言うと「担当者が異動したら誰も直せなくなった」という相談を弊社にもよくいただきます。まずは基本を正確に押さえて、その後で「代替手段」も知っておくと選択肢が広がります。
AI鬼管理山崎 AI鬼管理山崎
この記事はまず正確なVBAコードを解説します。そのうえで、後半では「VBAを書かずにAIに頼む」という選択肢も紹介します。どちらが自社に合うか、比較しながら読み進めてください。

この記事を最後まで読むと、次の5つが明確になります。

✔️自分のファイル名を取得する最短コード(ThisWorkbook.Name)
✔️ファイルパスから名前だけ抜き出す3つの方法(InStrRev/Dir/FileSystemObject)の使い分け
✔️Dir関数の応用(存在チェック・フォルダ一覧・ワイルドカード検索)
✔️VBAでつまずきやすいエラーとその回避策
✔️VBAが書けなくても、AIに日本語で頼むだけでファイル管理を自動化する方法
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年8月最新】VBAでファイル名を取得する4つの方法|非エンジニアのためのDir関数・FileSystemObject入門
VBAでファイル名を取得する4つの方法(ThisWorkbook.Name/InStrRev/Dir関数/FileSystemObject)を実務目線で整理。エラー対処法から、AIならコードなしで同じ処理ができる理由まで解説します。

01 自分のファイル名をVBAで取得する マクロが書かれているファイル自身の名前を調べる

最も基本的なパターンは、「今このマクロが動いているExcelファイル自身のファイル名」を取得するケースです。請求書テンプレートや月次レポートのように、ファイル名にファイル自身の情報を埋め込みたいときによく使います。

📚 用語解説

VBA (Visual Basic for Applications):Excel・Word・AccessなどMicrosoft Office製品に組み込まれているプログラミング言語。「マクロ」と呼ばれる自動処理を、ボタン一つで実行できるようにするための仕組みです。プログラミング未経験者でも、決まった操作の繰り返し作業(転記・集計・ファイル整理など)を自動化する目的でよく使われます。

コードはシンプルです。ThisWorkbook.Nameを使うと、拡張子つきのファイル名(例:「見積書.xlsx」)が取得できます。

Sub GetOwnFileName()
    Dim fileName As String
    fileName = ThisWorkbook.Name    ' 例: "見積書.xlsx"
    MsgBox fileName
End Sub

ポイントはThisWorkbookActiveWorkbookの違いです。ThisWorkbookは「このマクロが書かれているブック自身」を指すのに対し、ActiveWorkbookは「現在アクティブ(選択中)になっているブック」を指します。複数のExcelファイルを開いた状態でマクロを実行すると、この2つが別のファイルを指すケースがあるため注意が必要です。

💡 拡張子を除いた名前だけ欲しいとき

ThisWorkbook.Nameは拡張子つきで返ってきます。拡張子を除きたい場合は、後述するInStrRev関数で最後の「.」の位置を調べ、そこより前の文字列だけを切り出します。

また、ファイル名だけでなく保存場所を含むフルパスが必要な場合は、ThisWorkbook.FullName(フルパス+ファイル名)やThisWorkbook.Path(フォルダパスのみ)を使います。

Sub GetFullPathInfo()
    Debug.Print ThisWorkbook.FullName   ' 例: "C:\Users\kohei\Documents\見積書.xlsx"
    Debug.Print ThisWorkbook.Path       ' 例: "C:\Users\kohei\Documents"
    Debug.Print ThisWorkbook.Name       ' 例: "見積書.xlsx"
End Sub

📚 用語解説

フルパス(絶対パス):ドライブ名(C:など)からファイルの場所までを省略せずに表記したパスのこと。「C:\Users\kohei\Documents\見積書.xlsx」のように、どのフォルダの何階層下にあるファイルかを一意に示します。対して「見積書.xlsx」のようにファイル名だけの表記は「相対パス」と呼ばれ、実行時のカレントフォルダによって指す場所が変わります。

AI鬼管理山崎 AI鬼管理山崎
弊社にご相談いただく企業様の多くが、「このExcelを開いたときのファイル名を自動でログに残したい」というニーズをお持ちです。ThisWorkbook.Nameを使えば1行で解決しますが、実務ではここに「日付を付け加える」「フォルダに保存する」といった処理が絡んでくるので、次章以降の知識も合わせて必要になります。

02 ファイルパスからファイル名を取得する3つの方法 InStrRev・Dir・FileSystemObject、それぞれの特徴と使い分け

自分自身のファイルではなく、「このフルパスの文字列から、ファイル名の部分だけを抜き出したい」というケースも多く発生します。例えば「フォルダ内の全ファイルパスがセルに書かれたリストから、ファイル名だけを一覧にしたい」といった業務です。この場合、代表的な方法が3つあります。

2-1. InStrRev関数で文字列から切り出す

1つ目は、文字列操作だけで完結させる方法です。ファイルパスの最後の区切り文字「\」の位置をInStrRev関数で調べ、それより後ろの文字列をMid関数で取り出します。

📚 用語解説

InStrRev関数:文字列の中から、指定した文字を「後ろから」検索してその位置(何文字目か)を返す関数。通常のInStr関数は前から検索しますが、ファイルパスのように「最後の区切り文字」の位置を知りたい場合はInStrRevの方が確実です。

Sub GetFileNameByInStrRev()
    Dim fullPath As String, fileName As String
    fullPath = "C:\Users\kohei\Documents\report.xlsx"
    fileName = Mid(fullPath, InStrRev(fullPath, "\") + 1)
    MsgBox fileName   ' -> "report.xlsx"
End Sub

この方法の利点は、ファイルが実在しなくても動く点です。次に紹介するDir関数はファイルシステムに実際にアクセスして存在確認をしますが、InStrRevは純粋な文字列処理なので、単に「セルに書かれたパスの文字列を整形したい」だけの場合に向いています。

2-2. Dir関数でファイル名を取得する

2つ目はDir関数を使う方法です。Dir関数にフルパスを渡すと、そのファイルが実在する場合にファイル名だけを返し、存在しない場合は空文字("")を返します。

📚 用語解説

Dir関数:Windowsのファイルシステムに実際に問い合わせて、指定した条件に合うファイル・フォルダの名前を返すVBAの組み込み関数。単体のファイル名取得だけでなく、存在チェックやフォルダ内の一覧取得にも使える多機能な関数です。

Sub GetFileNameByDir()
    Dim fileName As String
    fileName = Dir("C:\Users\kohei\Documents\report.xlsx")
    If fileName <> "" Then
        MsgBox fileName & " は存在します"
    Else
        MsgBox "ファイルが見つかりません"
    End If
End Sub

Dir関数の強みは、「ファイル名の取得」と「存在チェック」を同時に行える点です。ファイルが本当に存在するかを確認しながら名前を扱いたい場合は、InStrRevよりDir関数の方が安全です。

2-3. FileSystemObjectを使う方法

3つ目はFileSystemObject(略称FSO)というオブジェクトを使う方法です。VBAの標準機能ではなく、Microsoft Scripting Runtime(scrrun.dll)という別のライブラリが提供するオブジェクトを呼び出して使います。

📚 用語解説

FileSystemObject (FSO):ファイル・フォルダの操作をオブジェクト指向的に扱えるようにする仕組み。VBA単体の関数よりも高機能で、ファイル名だけでなく拡張子の取得・削除、フォルダのコピー、ファイルの読み書きまで幅広く扱えます。VBAコードの中ではCreateObject("Scripting.FileSystemObject")で呼び出すのが一般的です。

Sub GetFileNameByFSO()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim fullPath As String
    fullPath = "C:\Users\kohei\Documents\report.xlsx"

    Debug.Print fso.GetFileName(fullPath)  ' -> "report.xlsx"(拡張子あり)
    Debug.Print fso.GetBaseName(fullPath)  ' -> "report"(拡張子なし)
End Sub

FileSystemObjectの最大の利点は、GetBaseNameのように拡張子を除いたファイル名を1行で取得できる点です。InStrRevやDir関数では拡張子を除くのに追加のコードが必要ですが、FSOならメソッドを呼ぶだけで済みます。

💡 参照設定について

CreateObjectを使う書き方は「実行時バインディング(レイトバインディング)」と呼ばれ、事前設定なしでそのまま動きます。もし入力補完(インテリセンス)を効かせたい場合は、VBEの「ツール」→「参照設定」から「Microsoft Scripting Runtime」にチェックを入れる「事前バインディング(アーリーバインディング)」という方法もありますが、社内で配布するファイルではCreateObject方式の方がトラブルが少なくおすすめです。

3つの方法を一覧で比較すると、以下のようになります。

方法実在チェック拡張子なし取得難易度向いているケース
InStrRev + Mid不可(文字列処理のみ)別途コードが必要やや高い(文字位置の計算)セル内の文字列を整形したいだけの場合
Dir関数可能(存在すれば名前を返す)別途コードが必要普通ファイルの存在確認も同時にしたい場合
FileSystemObject別メソッドで可能GetBaseNameで1行普通〜やや高い(オブジェクトの概念)拡張子の有無を頻繁に扱う・高機能な操作もしたい場合
代表菅澤 代表菅澤
「どれを使えばいいですか」と聞かれたら、私は基本的にFileSystemObjectをおすすめしています。拡張子ありなし両方を1行ずつで取れるので、後から仕様変更があっても対応しやすいからです。ただしDir関数は次章で紹介する「一覧取得」ができる唯一の方法なので、そちらも覚えておく価値があります。

03 Dir関数を使いこなす(存在チェック・一覧取得) フォルダ内の全ファイルを取得するワイルドカード活用法

Dir関数は単体のファイル名取得だけでなく、フォルダの存在チェックワイルドカードを使った一括取得にも対応しています。実務で最もよく使われるのが、この「フォルダ内の全ファイル名を一覧化する」パターンです。

3-1. フォルダの存在をチェックする

Dir関数の第2引数にvbDirectoryという属性を指定すると、検索対象にフォルダを含めることができます。ただし注意が必要です。vbDirectoryは「フォルダだけ」を検索対象にする指定ではなく、通常のファイルは属性指定に関わらず常に検索対象へ含まれます。そのため、確認したいフォルダと同じ名前の通常ファイルが存在する場合、Dir(path, vbDirectory)は実際のフォルダの有無に関わらず非空文字列を返してしまい、誤って「フォルダが存在する」と判定する可能性があります。

Sub CheckFolderExists()
    Dim folderPath As String
    folderPath = "C:\Users\kohei\Documents\請求書"

    Dim attr As Long
    On Error Resume Next
    attr = GetAttr(folderPath)
    Dim errNum As Long
    errNum = Err.Number
    On Error GoTo 0

    ' GetAttrが成功し(=パスが存在し)、かつvbDirectoryビットが立っている場合のみ「フォルダ」と判定
    If errNum = 0 And (attr And vbDirectory) = vbDirectory Then
        MsgBox "フォルダは存在します"
    Else
        MsgBox "フォルダが見つかりません"
    End If
End Sub
⚠️ Dir + vbDirectoryだけでは「フォルダ限定」の確認にならない

vbDirectoryは検索対象にフォルダを追加する指定であり、通常ファイルを除外するものではありません。確認したいパスと同名の通常ファイルが存在すると、Dir(path, vbDirectory)は非空文字列を返してしまい、フォルダが実在しなくても「存在する」と誤判定します。確実にフォルダかどうかを判定したい場合は、上記コードのようにGetAttr関数の戻り値をvbDirectoryとAnd演算し、ビットが立っているかで確認してください。

Dir関数に渡せる属性(第2引数)は複数あり、目的に応じて使い分けます。

定数対象
vbNormal0通常のファイル(属性指定なしと同じ、既定値)
vbReadOnly1読み取り専用ファイルも含める
vbHidden2隠しファイルも含める
vbSystem4システムファイルも含める
vbDirectory16フォルダ(ディレクトリ)を検索対象にする
vbArchive32アーカイブ属性のファイルも含める

3-2. ワイルドカードでファイル一覧を取得する

Dir関数はワイルドカード(あいまい検索の記号)に対応しています。「フォルダ内の全Excelファイルの名前を一覧化したい」というときによく使うパターンです。

📚 用語解説

ワイルドカード:「任意の文字列」を表す特殊記号のこと。VBAのDir関数では「*」(アスタリスク)が0文字以上の任意の文字列、「?」(クエスチョン)が任意の1文字を表します。例えば「*.xlsx」は「拡張子がxlsxなら何でも一致」という意味になります。

Sub ListAllExcelFiles()
    Dim fileName As String
    Dim folderPath As String
    folderPath = "C:\Users\kohei\Documents\請求書\"

    fileName = Dir(folderPath & "*.xlsx")
    Do While fileName <> ""
        Debug.Print fileName
        fileName = Dir()   ' 引数なしで呼ぶと「次に見つかったファイル」を返す
    Loop
End Sub

ここでの注意点は、2回目以降のDir呼び出しでは引数を書かないことです。最初の呼び出しで検索条件(フォルダとワイルドカード)を指定したら、以降はDir()を引数なしで呼ぶことで、前回の続きから次のファイルを返してくれます。

1回目
Dir(フォルダ+"*.xlsx")
で検索条件を指定
2回目以降
Dir()を引数なしで
繰り返し呼ぶ
終了
戻り値が""に
なったらループ終了

3-3. サブフォルダの中まで取得したい場合

Dir関数はサブフォルダの中までは自動的に潜ってくれません。1階層のみが対象です。サブフォルダの中身まで含めて全ファイルを取得したい場合は、再帰処理(自分自身を呼び出す処理)を書くか、より高機能なFileSystemObjectSubFoldersプロパティを使う必要があります。

⚠️ Dirループの多重使用に注意

Dir関数は内部で1つの検索状態しか保持できません。あるDirループの途中で、別のDir呼び出しを重ねて実行すると、検索結果が混ざって正しく動作しなくなることがあります。フォルダを再帰的に処理したい場合は、Dir関数の代わりにFileSystemObjectのSubFoldersプロパティを使う方が安全です。

AI鬼管理山崎 AI鬼管理山崎
ここまでのDir関数の話は、VBAを使う現場では「あるある」の内容です。ただ実際にご相談を受けていると、「サブフォルダまで含めて全部取得したい」というケースで、多くの方がDirループのネストで詰まっています。この場合は素直にFileSystemObjectに切り替えるのが結果的に近道です。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 つまずきやすいエラーと注意点 公開前に知っておきたい落とし穴

VBAでファイル名を扱う処理は、一見単純に見えて環境依存のエラーが起きやすい領域でもあります。よくあるつまずきポイントを整理します。

4-1. パスの文字数制限

Windowsの標準的なファイルパスには、伝統的に260文字という上限がありました。深い階層のフォルダに長いファイル名を保存していると、この上限に引っかかってDir関数やFileSystemObjectがエラーを返すことがあります。近年のWindowsでは設定変更によりこの上限を緩和できますが、社内の共有PCではその設定がされていないケースも多く、想定しておくべき注意点です。

4-2. 拡張子の扱い(xlsx / xlsm / xls)

マクロが有効なブック(.xlsm)を通常のブック(.xlsx)だと想定してコードを書いてしまうと、想定外の拡張子でファイル名の切り出しがずれることがあります。なお、InStrRev(fileName, ".")は文字列を後ろから検索するため、「2026.04月次報告.xlsx」のようにファイル名自体に複数の「.」が含まれるケースでも、最後の「.」(拡張子の区切り)を正しく検出できます。注意すべきは、前方から検索するInStr関数を誤って使ってしまったり、単純に「.」でSplitして先頭の要素だけを使うような実装をした場合で、これらは最初の「.」の位置で意図せず切れてしまいます。

💡 拡張子を除いた名前を1行で取りたいとき

InStrRevを正しく使えば拡張子の除去自体は問題なく行えますが、毎回「.」の位置を計算するコードを書くのは手間です。FileSystemObjectのGetBaseNameメソッドを使えば、同じ結果を1行で、位置計算のコードを書かずに取得できます。

4-3. 「ファイルが見つからない」エラーの典型パターン

✔️パス区切り文字の付け忘れ(フォルダパスの末尾に「\」が必要なケース)
✔️ネットワークドライブ(共有フォルダ)のパスが、実行するPCによって異なるドライブ文字になっている
✔️全角スペースや見えない文字がファイル名・フォルダ名に混入している
✔️マクロ実行時のカレントフォルダが想定と違うため、相対パス指定が意図通りに動かない

特に「全角スペースの混入」は見た目では気づきにくく、原因調査に時間がかかりがちです。ファイル名を扱うマクロでエラーが出た場合は、Debug.Printで実際に取得された文字列をイミディエイトウィンドウに出力し、目視で確認する癖をつけると原因特定が早くなります。

代表菅澤 代表菅澤
ここまでの内容を一通り実装できれば、VBAでのファイル名操作は実務レベルで困らなくなります。ただ正直なところ、こうした「エラー処理まで含めたマクロ」を非エンジニアの方が一人で完成させるのは、結構な学習コストがかかるのも事実です。

05 【独自データ】VBA運用の限界とAI移行の実際 マクロ資産のブラックボックス化と、弊社が実際に切り替えた範囲

ここからは弊社(株式会社GENAI)の実データをもとに、「VBAでの自動化」と「AIでの自動化」を比較します。VBAは非常に優れた技術ですが、運用が長期化すると特有の課題が出てくることも事実です。

5-1. VBAマクロが抱えがちな運用課題

弊社がこれまでに複数の企業様のマクロ資産を拝見してきた中で、共通して見られる課題が以下の3つです。

✔️属人化: マクロを書いた担当者が異動・退職すると、誰も修正できなくなる
✔️仕様変更への弱さ: フォルダ構成やファイル命名規則が変わるたびに、コードの修正が必要になる
✔️エラー時の原因調査コスト: 「動かなくなった」原因が文字コード・パス長・権限のどれかを切り分けるのに時間がかかる

こうした課題は、VBAという技術そのものの欠陥ではなく、「決まった手順をコードで固定する」という自動化の性質上、避けにくい構造的な問題です。同じことは、より新しい自動化ツールでも一定程度発生します。

5-2. 弊社での実運用: Claude Codeによるファイル操作の自動化

弊社では、Claude Code(Anthropic社のAIエージェント)を使って、経理・秘書業務・開発など幅広い業務にAIを組み込んでいます。Max 20xプラン(月額$200・約30,000円)を全社契約し、コードを書く代わりに日本語で指示するだけのファイル操作・整理タスクを日常的に処理しています。

項目内容
契約プランClaude Max 20x(月$200 / 約30,000円)
利用開始2025年後半〜
利用部署経営・営業・広告・開発・経理・秘書業務・個人業務まで全社
ファイル操作系の用途例請求書ファイルの一括リネーム・フォルダ整理・命名規則チェック・重複ファイルの検出

特に経理業務では、請求書チェック・経費仕訳・freee連携などの処理で月40時間 → 月5時間まで作業時間が圧縮できている肌感です(あくまで弊社での概算値です)。ファイル名の整形・一覧化といった、かつてVBAマクロで対応していた作業の多くも、この削減効果に含まれています。

⚠️ 数値の注意書き

上記は弊社の肌感ベースの数値であり、業種・業態・既存のマクロ資産の複雑さによって効果は変動します。「VBAを完全に廃止すべき」という主張ではなく、あくまで選択肢の一つとしてご覧ください。

5-3. VBAとAI、両方を使い分ける現実解

誤解してほしくないのは、「VBAはもう不要」という話ではないという点です。すでに安定稼働しているマクロを無理に置き換える必要はありません。弊社の実運用でも、以下のような使い分けをしています。

既存の安定マクロ
そのまま維持
(無理に置き換えない)
属人化した
複雑なマクロ

AIに仕様を説明して
再設計・引き継ぎ
新規の
ファイル操作業務

最初からAIに
日本語で指示
AI鬼管理山崎 AI鬼管理山崎
「動いているマクロは触らない」が鉄則です。ただ、担当者しかメンテナンスできない状態のマクロは、AIに仕様を説明しながら再設計するだけで、属人化のリスクを大きく下げられます。実際、弊社が支援した企業様でも、この「棚卸し+再設計」から着手するケースが増えています。

06 非エンジニアがAIでファイル管理を自動化する3ステップ VBAが書けなくても、日本語で指示するだけで実現できる

「VBAのコードを読むだけでも一苦労」という方も多いはずです。ここでは、プログラミング未経験の方が、AI(Claude Code)を使ってファイル名取得・整理を自動化するまでの流れを3ステップで紹介します。

ステップ1: 具体的な作業を日本語でそのまま伝える

最初のステップは、VBAのように「関数を選ぶ」必要が一切ないという点です。「このフォルダの中にあるExcelファイルの名前を全部一覧にして」「ファイル名に日付が入っていないものだけ教えて」といった、普段使っている言葉のまま指示するだけで処理が実行されます。

💡 最初に試すべき指示の例

「デスクトップの請求書フォルダにあるファイル名を、拡張子なしで一覧にしてExcelに出力して」——この一文だけで、VBAでいうところのDir関数によるループ処理・FileSystemObjectによる拡張子除去が、コードを書かずに実行されます。

ステップ2: 結果を確認し、条件を追加で伝える

VBAであれば「条件を1つ追加する」だけでもコードの修正が発生しますが、AIに指示する場合は会話の続きで条件を足すだけです。「2026年4月以降に更新されたファイルだけに絞って」「ファイル名の末尾に"_確定"がついているものは除外して」といった追加条件も、その場で反映されます。

ステップ3: 定型業務として繰り返し使えるようにする

毎週・毎月など定期的に発生する作業であれば、指示の流れをそのまま繰り返し使えるパターンとして保存しておけます。これにより、担当者が変わってもコードを読み解く必要がなく、業務手順書を見ながら同じ指示を出すだけで同じ結果が再現できます。

Step 1
日本語で
やりたいことを伝える
Step 2
結果を見て
条件を追加する
Step 3
定型業務として
繰り返し使う
✔️VBAの構文(Dir・InStrRev・FileSystemObjectの使い分け)を覚える必要がない
✔️仕様変更(フォルダ構成やファイル命名規則の変更)にも、会話で条件を伝え直すだけで対応できる
✔️担当者が変わっても、コードではなく「指示の履歴」を引き継げる
✔️ターミナル(黒い画面)を使わないデスクトップ版であれば、ChatGPTと同じ感覚で操作できる
代表菅澤 代表菅澤
弊社に相談に来られる経営者の方の多くが、「VBAが書ける社員が一人しかいない」という悩みを抱えています。AIに置き換えることで、その属人化リスクそのものを解消できるのが一番のメリットだと感じています。
AI鬼管理山崎 AI鬼管理山崎
もちろん「VBAを学ぶこと」自体には価値があります。ただ、目的が「ファイル名を取得したい」という作業そのものであれば、手段としてAIを使う方が圧倒的に早く、かつ属人化しないというのが弊社の結論です。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 VBAで自分で書く vs AIに任せる 早見表 あなたの状況に合わせた選び方

最後に、状況別の判断基準を1枚の表にまとめます。

あなたの状況おすすめ理由
すでに安定稼働しているマクロがあるVBAのまま維持動いているものを無理に置き換える必要はない
マクロを書ける担当者が1人しかいないAIへの移行を検討属人化リスクの解消が急務
単発・一度きりのファイル整理をしたいAIに直接依頼コードを書く工数の方が高くつく
プログラミングを学ぶ目的も兼ねているVBAを学習構造化された学習には手を動かす経験が有効
複数業務(経理・営業・広告等)を横断で自動化したいAI(Claude Code)を軸に据えるVBAは基本Excel内に閉じるが、AIは業務横断で使える

迷ったときの目安は「その処理を1年後も同じ人がメンテナンスできるか」です。答えが「わからない」であれば、AIへの移行を検討する価値があります。

08 まとめ ── ファイル名取得の先にある「業務自動化」 VBAとAI、それぞれの正しい使い方

この記事では、VBAでファイル名を取得する4つのパターン(自分のファイル名/InStrRev/Dir関数/FileSystemObject)と、よくあるエラー対処、そしてAIによる代替手段までを整理しました。最後にポイントを振り返ります。

✔️自分自身のファイル名はThisWorkbook.Nameで取得できる(拡張子つき)
✔️フルパスから名前だけ抜き出す方法はInStrRevDir関数FileSystemObjectの3種類
✔️フォルダ内の一覧取得やワイルドカード検索にはDir関数が便利だが、多重ループには注意
✔️拡張子を除いた名前を安全に取りたいならFileSystemObjectGetBaseNameが確実
✔️パスの文字数制限・ファイル名内のピリオド・全角スペースの混入がエラーの典型原因
✔️既存の安定マクロは維持しつつ、属人化した処理や新規業務はAIへの移行を検討する価値がある
✔️弊社GENAIではClaude Code導入により、経理などのファイル操作系業務で月40時間→月5時間の削減効果(肌感値)

VBAは今なお現場で強力なツールですが、「誰が保守するのか」という属人化の問題は避けて通れません。ファイル名取得のような小さな処理であっても、積み重なれば大きな運用コストになります。

「うちのマクロ、実は担当者しかわからない」「新しく仕組みを作るなら、コードを書かない方法も検討したい」——そう感じた方は、ぜひ以下からAI鬼管理にご相談ください。

代表菅澤 代表菅澤
弊社では「AI鬼管理」というサービスで、VBAを含む既存の業務自動化資産の棚卸しから、Claude Codeを使った再設計・社内浸透まで伴走支援しています。属人化したマクロを一緒に見直すところから始められますので、お気軽にご相談ください。

「担当者しか触れないマクロ」を、AI鬼管理が一緒に棚卸しします

VBAで積み上げてきた自動化資産を無理に捨てる必要はありません。
属人化リスクのある部分だけをAIに置き換える、現実的な移行プランをご提案します。

AI鬼管理山崎 AI鬼管理山崎
「社内のマクロが何本あるか把握できていない」という状態からでも大丈夫です。まずは無料相談で、貴社の自動化資産の現状整理からお手伝いします。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI鬼管理 — Claude Code導入支援トレーニング

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

AIBPO by AI鬼管理 — 定型業務の丸ごと代行

業務を丸ごと任せたい方へ

AIBPO by AI鬼管理

請求処理・データ入力・問い合わせ対応などの定型業務を、AI×人の品質管理体制で丸ごと代行。いまのコストの50%目安で、日々は成果物を承認するだけ。

よくある質問

Q. VBAで自分のファイル名だけを取得する一番簡単な方法は?

A. ThisWorkbook.Nameを使うのが最も簡単です。1行で拡張子つきのファイル名(例:「見積書.xlsx」)が取得できます。拡張子を除きたい場合は、InStrRev関数で最後の「.」の位置を調べて切り出すか、FileSystemObjectのGetBaseNameメソッドを使うとより確実です。

Q. Dir関数とFileSystemObject、結局どちらを使えばいいですか?

A. 単純な存在チェックやフォルダ内一覧の取得ならDir関数で十分です。一方、拡張子の有無を頻繁に扱う、フォルダのコピーなど高度な操作もしたい、という場合はFileSystemObjectの方が機能面で有利です。迷った場合はFileSystemObjectを使っておくと後から機能追加がしやすくなります。

Q. Dir関数でファイル一覧を取得しようとするとループが止まらなくなります。原因は?

A. 多くの場合、2回目以降の呼び出しでも引数を渡してしまっていることが原因です。Dir関数は最初の呼び出しだけ検索条件(フォルダとワイルドカード)を渡し、2回目以降は引数なしのDir()を呼ぶ仕様になっています。この仕様を誤解していると無限ループや意図しない結果になります。

Q. サブフォルダの中のファイルまで一括で取得することはできますか?

A. Dir関数単体では1階層分しか取得できないため、サブフォルダの中身まで扱うには再帰処理を自分で書くか、FileSystemObjectのSubFoldersプロパティを使う必要があります。Dirループを多重にネストさせると検索状態が混ざって誤動作するため、階層をまたぐ処理はFileSystemObjectの利用をおすすめします。

Q. VBAを使わずに、AIだけでファイル名の一覧化はできますか?

A. できます。Claude CodeのようなAIエージェントであれば、「このフォルダのファイル名を一覧にして」と日本語で指示するだけで、VBAのDir関数やFileSystemObjectに相当する処理をコードなしで実行できます。条件の追加や変更も会話ベースで対応できるため、非エンジニアの方でも扱いやすい方法です。

Q. 長年使ってきたVBAマクロは、AI導入後に全部捨てるべきですか?

A. いいえ、その必要はありません。すでに安定して動いているマクロは維持し、属人化して誰もメンテナンスできない部分や、これから新規に作る業務フローだけをAIに置き換えるのが現実的です。弊社でもすべてを一度に置き換えるのではなく、リスクの高い部分から段階的に見直す進め方を推奨しています。

Q. ファイル名に日本語や全角スペースが含まれる場合、VBAで注意すべき点はありますか?

A. 全角スペースは見た目では半角スペースと区別がつきにくく、パス指定のミスマッチでファイルが見つからないエラーの原因になりやすいです。エラーが出た場合は、Debug.Printで実際に取得された文字列をイミディエイトウィンドウに出力し、目視で余分な文字が混入していないか確認する方法が有効です。

AIAI鬼管理

AI鬼管理/AIBPO by AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
専門スタッフが、御社に最適な
業務自動化・業務代行プランを無料でご提案します。

サービスを選択してください

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年8月14日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。