0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第7回 直感!スグに使える業務向けVBA汎用プロシージャ(ダミーフォルダ)

Last updated at Posted at 2025-04-29

第0回で配布しました汎用プロシージャのコードの紹介と簡単な解説をやっていきたいと思います!
以下のリンクから .bas ファイルをダウンロードできます(zipファイル)

今回ご紹介するプロシージャは

プロシージャ名 概要
CreateDummyFolder 重複しない一時フォルダの作成

さて...汎用と言っておきながら少々マニアック(?)なプロシージャのご紹介です。

こちら、親フォルダの絶対パスを渡すと、そのフォルダ内に名前が重複しないフォルダを生成し、生成したフォルダの絶対パスを返すものになっております。どういうときに使うんだとお思いになられるかと思いますが、個人的な実体験として**.emlファイル**を展開するときにこの処理が役に立ちました。

emlファイルとはールのヘッダ情報(送信者、受信者、件名など)と本文、添付ファイルが含まれるzipファイルのようなものになります。

私が作成したツールはemlファイルを展開し、メールの件名と同名のフォルダを生成し、メール本文等を.txtファイルにまとめ添付ファイルとともに生成したフォルダ内に保存するというものだったのですが、保存したメール件名が同じだった場合フォルダ生成時にエラーが発生してしまいました。

処理の都合上、ダミーのフォルダを生成すれば解決できることに気が付き、下に紹介するようなコードを追加することによって解決いたしました。

フォルダに限らずですが、例えばExcelのシートなどなかなかエラーの解決ができないときはダミーのデータを生成しワンクッション置くことによってエラーを回避できるパターンがありますので頭の片隅に入れていただければ幸いです...

CreateDummyFolder

Function CreateDummyFolder(basePath As String, Optional baseName As String = "Dummy") As String
'------------------------------------------------------------------------------------------------------------------------------
' 概要  |指定パスに重複のないダミーフォルダを作成し、その絶対パスを返す
'------------------------------------------------------------------------------------------------------------------------------
' 引数1 |basePath - フォルダを作成する親ディレクトリの絶対パス(String型)
' 引数2 |baseName - フォルダ名のベース(既定値:"Dummy")(String型)
'------------------------------------------------------------------------------------------------------------------------------
' 戻り値 |String型 - 作成されたフォルダの絶対パス
'------------------------------------------------------------------------------------------------------------------------------
' 実装  |Ver.1.0.0(2025/04/20:新規)
'------------------------------------------------------------------------------------------------------------------------------

    Dim dummyNumber As Long '重複回避の際に付与する番号
    Dim newFolder   As String '作成するフォルダ名(絶対パス)
    
    'フォルダ名を初期化
    newFolder = basePath & "\" & baseName
    dummyNumber = 1
    
    '重複回避ループ
    Do While Dir(newFolder, vbDirectory) <> ""
        newFolder = basePath & "\" & baseName & "_" & dummyNumber
        dummyNumber = dummyNumber + 1
    Loop
    
    MkDir newFolder 'フォルダ作成
    
    CreateDummyFolder = newFolder

End Function

詳細な説明は割愛させていただきますが、本プロシージャ(関数)は生成したフォルダの絶対パスが返ってきますので、それを活用して不要であればそのフォルダを削除したり名前を変更することもできます。

今回は応用的な内容でしたが、「困ったときはダミーを作ってみる」というテクニックの紹介でした!

直感!VBAシリーズ記事一覧

もしよろしければ他の記事もご覧ください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?