素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。2019-03-23ファイル名が重複するときに自動ナンバリングするVBA自作メソッドファイル名が重複しているときに自動ナンバリングしたファイル名を返すメソッド頭の体操に作ってみた。ExportAsFixedFormatメソッドで新規ファイルを作成したときなんかに、同一名のファイルが存在したときの対策用。保存先に「ち~んw.pdf」というファイルを保存しようとしたときに、既に同一名のファイルが存在した場合、「ち~んw(1).pdf」、「ち~んw(2).pdf」......といった具合に新たなファイル名にして保存するために、ナンバリングしたファイル名を返す、というふうにしたい。コーディング書いたコードは次の通り。Stringは引数、返り値設定。〈拡張子を除いたファイルのフルパス〉というのは、後で見たときにわかりにくかろうと思うので、冗長な引数名にした。拡張子を除いた新規ファイルのファイルフルパス、新規ファイルの拡張子名を受け取って、重複がある場合はナンバリングを付して拡張子も加えたファイル名、つまりはファイルのフルパスを返すメソッド。fullNameWithoutFileExtは、別になくても構わないのだけれど、引数名が長すぎるので、一旦tmpで受け取る。10行程度の短いメソッドなので、まあ許されるだろう、と。")"Loopがメインの処理。変数nは、ナンバリング用の変数。使用済みの番号があったら、ループ内でインクリメントする。必要ないけれど、明示的に初期化しておく。FileSystemObjectでFileSystemObjectのインスタンスを準備。ループ内でファイルの存否確認に使う。Dir関数を使う手もあるけれど、今はFileSystemObjectの練習中だということと、FileSystemObjectを使った方がreadableになるような気がするので、積極的に使う。事前バインディングのコードなので、参照設定を忘れずに。ループ処理もついでに見ておこう。fileExt)このとおり。readableと述べたのはまさにこのことで、「カッコ内に示したファイルが存在する間はやれ!」とそのまま読める。""では、直感的に何のことかわからないので、イマイチだと思うようになった。fileExt」がそもそも付けんと欲したファイル名なので、このファイルが存在しないならばナンバリングの必要はない。従って、ループに突入する必要などないわけだ。")"変数nをインクリメントさせて、カッコで括った文字列を変数suffixStrにぶちこむ。これを繰り返して、同一ファイル名が存在しなくなった時点でループから抜ける。あとは、こうして得られたuniqueなファイルフルパスを返しておしまい。使ってみるワークシートのA1セルをこんなふうにして、次のコードで実験。ちなみに、このワークシートのオブジェクト名を「MainSheet」に変更している。Subご覧のとおり、ワークシートのA1セルに「ち~んw」と書き込んで、ブックのあるフォルダ内の「★作成したPDF」フォルダに「ち~んw.pdf」という名前のPDFファイルを出力する、というだけのコード。実行結果1回目フォルダ内は、こうなった。2回目フォルダ内は、こうなった。3回目フォルダ内は、こうなった。おわりに車輪の再発明だったら、教えろてください。参考akashi-keirin.hatenablog.com改良しました。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。