ExcelマクロVBA技術解説 | Dir関数の制限について | Excelマクロの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2016-03-16

Dir関数の制限について

VBAでフォルダ・ファイルの存在確認や、
一覧取得において使われる関数ですが、
いくつかの使用上の注意点、制限事項があります。


・3桁拡張子の指定時の問題
Sub Sample1()
  Dim buf As String
  buf = Dir(ThisWorkbook.Path & "\*.xls")
  Do While Len(buf) > 0
    '・・・処理・・・
    buf = Dir()
  Loop
End Sub
このように指定した場合、xlsxやxlsmも対象となります。
3桁の拡張子を指定した場合は、4桁の拡張子も対象となります。
つまり、
*.xls*
これと同じ動作という事です。

Dir関数を使って、3桁拡張子のファイルのみ取得するには、
Sub Sample2()
  Dim buf As String
  buf = Dir(ThisWorkbook.Path & "\*.xls")
  Do While Len(buf) > 0
    If LCase(buf) Like "*.xls" Then
      buf = buf
    End If
    buf = Dir()
  Loop
End Sub
If LCase(buf) Like "*.xls" Then
この部分は、
If Mid(buf, InStrRev(buf, ".") + 1) = "xls" Then
このような書き方でも良いでしょう。


・256バイトを超えるパス名が扱えない

これは、そもそもWindowsとしての制限もあるので、ローカルのPC内の処理では通常は問題が出ないはずです。

ネットワークドライブ等でこの問題が発生した時の回避方法としては、
ファイルシステムオブジェクト(FileSystemObject)を使ってください。


・特殊なネットワークドライブでエラー

ネットワークドライブで、
\\abc.def.ghi\
このような名称の場合は、

このようなエラーになってしまいます。

最も簡単な回避方法は、
ネットワクドライブの割り当てをすることでしょう。
もしくは、
ファイルシステムオブジェクト(FileSystemObject)を使う事です。


全体としては、
ファイルシステムオブジェクト(FileSystemObject)を使う方が無難なのですが、
VBAからしたら、外部のオブジェクトを扱う訳ですから面倒ではあります。
出来れば、Dir関数で済ませられるようなPC環境にすることをお勧めします。




同じテーマ「ExcelマクロVBA技術解説」の記事

画像サイズ(横x縦)の取得について
文字種(ひらがな、全半角カタカナ、半角英大文字等々)の判定
よくあるVBA実行時エラーの解説と対応
ローカルウィンドウの使い方
オブジェクトの探索方法
変数とプロシージャーの命名について
フルパスをディレクトリ、ファイル名、拡張子に分ける

新着記事 ・・・新着記事一覧を見る

データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • Dir関数の制限について

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP