VBAフォルダが存在するか調べる方法を解説します。Dir関数の引数にvbDirectoryを渡して判定するか、FileSystemObjectのFolderExistsメソッドを使用します。Dir関数(vbDirectory)による判定すべてのファイルを調べるコードと併用不可FileSystemObjectのFolderExistsメソッドで判定する汎用関数化Dir関数(vbDirectory)による判定フォルダが存在するかどうかは、Dir関数の引数に判定フォルダパスとvbDirectoryを渡すと判定できます。"指定のフォルダが存在しません。IfIf文の判定が「=""」であることを見るとわかりますが、Dir関数の結果はTrue/Falseではありません。フォルダが存在する場合は「フォルダ名」(サンプルでは"テストフォルダ")フォルダが存在しない場合は""という仕様になりますので、Dir関数によるフォルダの存在判定は「=""」「<>""」のどちらかで行うことになります。以下のように記述します。上記のコードは簡潔なのですが、Dir関数には注意すべき仕様があります。簡単に言うと「すべてのファイルを調べるコード」との併用ができません。こんなコードを書いたとします。「引数なしのDir()は、ひとつ前のDir関数の続きを実行する」という性質を利用しています。「ひとつ前のDir」がフォルダの存在判定をしたDirに上書きされてしまうんですね。そのせいでこのコードは全ファイルを処理できません。複雑で見落としやすいポイントになりますので気を付けましょう。この対策として、フォルダが存在するかを調べるコードをFileSystemObjectに書き換える必要があります。FileSystemObjectのFolderExistsメソッドで判定するフォルダの存在判定は、FileSystemObjectオブジェクトのFolderExistsメソッドを使って行うこともできます。今この問題が解決できれば良い人はまるごとコピペで対応してください。FileSystemObject(以下FSO)を使用したフォルダ判定コードがこちらです。判定がTrue/Falseになるのはわかりやすくていいですね。このコードであれば、Dir関数を使ったループ中でも問題なくフォルダの存在判定を行うことができます。Dir関数をファイル走査によく使う方は、この書き方も覚えておいてください。保存フォルダパスこちらも書き換え可能です。通り、Dir関数で行うフォルダ判定は簡潔ですが罠があり、しかしFSOでのフォルダ判定は安定しますがコードが面倒です。汎用関数にして持っておきましょう。FSO.FolderExists(フォルダパス)↓これと同じ処理ですので読み解いてみてください。Ifこの関数であれば1行で書けるうえに、コードがDir関数の実行中であるかは気にする必要がありません。このようにちょっとした処理を関数化しておくと、コードが書きやすく、そして読みやすくなります。書くコードは、汎用関数にして持っておきましょう。21:59Tweet関連記事2023-02-24既存ファイルを上書きしてファイルを移動する移動先にファイルがあった場合は上書きしてファイルを移動する...2023-02-06Dir関数でサブフォルダの一覧を取得する方法Dir関数を使ってサブフォルダの一覧を取得する方法を解説します...2023-01-14ファイルを部分一致(ワイルドカード)で検索するファイル名を部分一致検索する方法を解説します。「日本語の変数でプログラミングすれば、みんなが幸せになれる」という思想の元、主にExcelVBAのマクロやコードを解説しているブログです。この思想については↓の記事をご覧ください。変数を日本語にすればプログラミングが上達する記事の更新通知や質問の回答はTwitterでも行っております。お気軽にフォローください。12はてなブログをはじめよう!LimeCodeさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。