指定したフォルダ内から「特定の文字を含まないファイル名」を取得(Excel VBA)

【本日のミッション】

Excel VBAにて、指定したフォルダ内から「特定の文字を含まないファイル名」を取得し、Excelのシートに書き出せ

「特定の文字を含む」ってよく見かけるけど、「特手の文字を含まない」条件にするには、ちょっと工夫が必要です。

ミッションの概要

今回指定フォルダにするのはこちらです。

このフォルダに入っている、「不可」の文字を含まないファイル名を、Excelのシートに書き出すというミッションです。

ファイルの準備とプロシージャ

Excelマクロ有効ブック(.xlsm)のファイルを新規作成します。

そのファイルのシートに下記の通り、

  • フォルダのパスを入力するセル(A3)
  • 含まれないようにする文字を指定するセル(A6)
  • 取得したファイル名を書き出すセル(A9:9行目1列目)を準備します。

フォルダパスには、ファイル名を取得したいフォルダのフルパスを入力します。

このシートをアクティブにした状態で、Alt+F11でVsual Basic Editerを起動します。

[挿入]-[標準モジュール]で新規モジュールを作成し、下記の通りコードを記入します。

■■■スポンサーリンク■■■
Sub 指定したフォルダ内から特定の文字を含まないファイル名のみを取得()

    '【変数】
    Dim ws As Worksheet '処理対象シート
    Dim fn As String    'ファイル名
    Dim t_row As Long   '処理ターゲット行
    Dim pt As String    '処理対象フォルダパス
    Dim NG_Word As String   'この文字が含まれないファイル名を取得

    '■変数セット
    Set ws = ActiveSheet        '変数ws=アクティブシートをセット
    pt = ws.Range("A3")         '変数ptにセルA3のパスをセット
    NG_Word = "*" & ws.Range("A6") & "*"    'この文字が含まれないファイル名を取得
    t_row = 9                   '変数t_rowにファイル名を書き出す初めのセルの行番号をセット

    fn = Dir(pt & "\*.*") '変数fnに1個目のファイル名を格納

    Do While fn <> ""          'fnが空欄になるまでDo While内の処理を続ける
    
        If Not fn Like NG_Word Then 'NG_Wordが含まれないファイル名のみ処理を続ける
            ws.Cells(t_row, 1) = fn 'Cells(t_row, 1)にファイル名を書き出し
            t_row = t_row + 1       'ファイル名を書き出すセルの行番号+1(一つ下の行番号)
        End If
        
        fn = Dir()             '変数fnに次のファイル名を格納(ファイルが無い場合は空欄になる)
    Loop

End Sub

記入したプロシージャ(Sub~End Subまで)のどこかにカーソルを置いてF5キーをクリックしてください。

Excelのシートを見てください。

ファイル名を書き出すセルは9行目の1列目から下に順に書き出すようなコードにしています。

取捨選択フォルダに入っている「不可」の文字を含まないファイル名が書き出されました♪

「特定の文字を含まない」の幅を広げる

特定の文字は、ws.Range(“A6”) の「不可」という文字列にしています。

更に「~不可」「不可~」「~不可~」全てのパターンを含まないように、前後に”*”を付けるようにしています。

参考:ワイルドカードとは。使い方いろいろ。(Excel)

NG_Word = "*" & ws.Range("A6") & "*"

Not A Like B

今回のように、「指定した文字を含まない」を条件にする場合は、

Not A Like B
「AがBのパターンとマッチしない場合はTrueを返す」

というLike演算子を使用します。

If Not fn Like NG_Word Then

fn(ファイル名)が「NG_Word(*不可*)」のパターンとマッチしない場合はTrueを返します。

【参考】

指定したフォルダ内のファイル名全てを取得(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)

■■■スポンサーリンク■■■