10日目 色々複雑なDir関数

今日は以下を勉強した。

・ファイル操作(Dir)
・ファイル操作(MkDirなど)


まず「ファイル操作(MkDirなど)」で、ステートメントや関数でエラーが出てしまう物がいくつかあった。
何となく覚えていたけど、もう一度よく読み込んで使ってみたりした。

 

・MkDirでフォルダを作成する時に、指定したフォルダが既に存在する時はエラーになってしまう。
・RmDirで指定したフォルダを削除する時に、フォルダ内にファイルが残っていたらエラーになってしまう。
・Killで指定したファイルを削除する時に、ファイルが存在しないとエラーになってしまう。
 また読み取り専用属性ファイルは削除出来ない。
・Nameで既存ファイルの名前を変更する時に、変更後のファイルが既に存在する時はエラーになってしまう。

 

ざっと挙げるとこれらがエラーになってしまう物だった。
まあ、使い方は簡単なのでエラーとか上書きに気を付ければ使えそうだ。


「ファイル操作(Dir)」は、前にDir関数は使っていたから何となく覚えていた。
でも以下のコードが最初よく分からなかった。

 

strDir = Dir(パス, vbDirectory)
Do While strDir <> ""
  If strDir <> "." And strDir <> ".." Then
    If GetAttr(パス & strDir) And vbDirectory Then
      Debug.Print strDir 'strDirはフォルダです
    End If
  End If
  strDir = Dir()
Loop

 

この2つのIf文の判定の意味が分からない。。


まず、「If GetAttr(パス & strDir) And vbDirectory Then」は以下のページに解説が書いてあった。
https://excel-ubara.com/excelvba4/EXCEL243.html


2進数を勉強しなければと思った。。
頑張ろう。

 

次に、「If strDir <> "." And strDir <> ".." Then」。


Dir関数で取得された文字列が、「.」か「..」じゃ無かったらという判定。
大体「.」か「..」なんて取得されないんじゃないのとか思っていたら…。


自分でDir関数を使ってコードを書いていたら、「.」が取得されてしまった。

もちろん意味がさっぱり分からない。。

 

でも以下のページに解説が書かれていた。
https://tonari-it.com/excel-vba-dir-folder-list/

 

今日はとても勉強になったと思う。