とりにくを好きな人がVBAを勉強しています。

VBAを中心に、その他日々の生活で感じていることを書いていきます。

【VBA】Dir関数について調べた日 その2

おはようございます。こんにちは。こんばんは。とりにくVBAです。
前回、フォルダ構成のみを複製しようとして行き着いたDir関数について調べたことを書きました。
今回はその続きを書いていこうと思います。

前回の復習

Dir関数はパスを指定して、そこにあるファイルを取得することができるのでした。
そして、続けて取得するにはかっこの中は空にして記述するのでした。
例えば、

Dim test as string
test = Dir("パス")
debug.print test
test = Dir()
debug.print test

これで、指定したパスの中にあるファイルを2つイミディエイトウィンドウに書き出すことができます。
繰り返し処理と条件分岐でさまざまなファイルを取得できそうだなあというところで終わっていましたね。

第2引数について

今回の私の目的は、フォルダ構成のみをコピーすることでした。
実はDir関数は第2引数で取得するファイルの種類を指定できます。それらは公式リファレンスで確認できます。
docs.microsoft.com


フォルダの取得であればvbDirectoryが使えそうですね。
ただし、説明をよく読むと、

属性のないファイルとディレクトリまたはフォルダー。

とあります。属性のないファイルも含まれてしまうのですね。

さて、何やら一つ壁に直面した感じがありますが、とりあえず試してみましょう。



とりあえず、テキトーにフォルダを作りました。
同じ場所にtestという名前のExcelファイルを作成し、そこでDir関数を使ってみました。

    Dim test As String
    Dim i As Integer
    
    test = Dir(ThisWorkbook.Path & "\", vbDirectory)
    
    For i = 1 To 5
        Debug.Print test
        
        test = Dir()
        
        
    Next i

このファイルがあるところで、属性のないファイルとディレクトリまたはフォルダーを取得してください。
というのを5回繰り返すというものです。

結果はこちら。
f:id:mayo032j:20200523071826p:plain

「予算」と「備品管理」はフォルダの名前です。
「test.xlsm」はExcelファイル自身。これは属性のないファイルとして取得されました。



ンんン…

「.」「..」

こういうのあると困りますよね。


これが何かは今の私ではうまく説明できません。
検索して調べてみてください。


とりあえずvbDirectoryを第2引数に指定しても、私の意図しているフォルダ構成のみを取得するということはできないようです。

検索してみると、いろいろな解決方法が出てきたのですが、今の私ではちょっと手に負えない感じです。

まとめ

2回にわたってDir関数について調べたことを書きました。
なんとなくやろうとしていることができそうなところまできましたが、全体の3割くらいでしたでしょうか。

しかし、フォルダ構成をコピーする作業ていうのは年度替わりに1度やるくらいの頻度ですので、完ぺきに自動化する必要があるかどうかも疑問なところです。
(ものすごい数を複製する場合には、自動化できるように勉強したほうがいいと思います。私は15個くらいだったので最悪一個一個手作りでもそんなに時間はかかりません。)


実際、今回調べた内容で、「.」「..」を含んで取得して、
それら以外の名前をMkDirステートメントで作るというので、仕事のときは済ませました。

全部VBAでやることが私の仕事ではないので。。。

ただ、必要に迫られてとか、興味を持ったとかの時に勉強すると一番頭に入ってきますので、またそんなときが来たらさらに詳しく調べて、記事にしたいと思います。


(お願い)
このブログは自分なりにわかったことを投稿しています。
はっきり言って最適解は提示できません。そんな知識はございません。
もし、記事を読んでいて間違った解釈をしているときやすごく回りくどいことをしている場合はご指摘ください。
また、他の方法があるよ!やこういう便利なやり方もありますよ!的な意見はものすごくありがたいです。