• ベストアンサー

File = Dir は何をしてるのでしょう?

vbaです。 ---------------------------- Sub フォルダの中にあるファイルとフォルダを書き出す() Dim File As String File = Dir("C:\*.*", vbDirectory) Do While File <> "" Debug.Print File File = Dir Loop End Sub ---------------------------- このコードを実行すると、 フォルダの中にあるファイルとフォルダを書き出されるのですが File = Dir のコードは何をしているのでしょうか? 引数なしのDirの使い方もよくわからないし File = Dirがある事によってどういう効果があるのかもわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • nac03056
  • ベストアンサー率48% (203/419)
回答No.2

疑問に対してそのまんま答えるなら、1つ読んできてFileに代入してるってことになります。 おそらく「File = Dir("C:\*.*", vbDirectory)」でもう全部読んでいるのになんでってことを疑問に感じているのかなと想像しますが、このDirはあくまで指定されたファイル等を1個だけ読んでくる関数なので、この場合は最初のファイル名等しか読んでいません。2つ目3つ目と読むには、そのつど「File = Dir」のようにDir関数を動かさないといけないのです。 ですのでこの行を意訳するなら「次のファイル名を読む」ってところでしょうか。

qw954987
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

何をしている? ソースの先頭にコメントがあるでしょう? 『Sub フォルダの中にあるファイルとフォルダを書き出す』と その通りです。 最初のは、cドライブルートフォルダの配下に存在するサブフォルダー名を返すって指示 二回目のは、前回の指定内容で再度問い合わせするということ >File = Dirがある事によってどういう効果があるのかもわかりません。 そんな時には、その行をコメントにすれば宜し。 どんな効果結果があるのか直ぐに分かる。 因みに、関数って何?とか変数って何?という技術レベルでは無いんですよねぇ?

qw954987
質問者

お礼

ありがとうございました。

関連するQ&A

  • フォルダのファイル数をvbaで取得したい

    vbaなのですが、フォルダにgifファイルがたくさんはいっていますが、 その数を数えるコードを教えてください。 今は、 Sub Macro7() Dim File As String Dim i As Long File = Dir("C:\*.*", vbDirectory) Do While File <> "" File = Dir i = i + 1 Loop MsgBox "ファイル数は" & i & "です" End Sub のように、全てのファイル数をカウントして求めています。

  • 実行時エラー 5 ファイル名の書き出し

    これはどういう意味のエラーなのでしょう? Const FolderName As String = "C:\Users" Sub ファイル名を書き出す() Dim myFile As String myFile = Dir(FolderName & "\*.*", vbDirectory) Do While myFile <> "" Debug.Print myFile myFile = Dir Loop End Sub このようにしてフォルダの中のファイル名を書き出していますが ある特定のファイル名になると、myFile = Dirの部分で、 実行時エラー 5 プロシージャーの呼び出し、または引数が不正 が発生します。 ファイル名をただ読み込んでるだけなのに、どうしてエラーが発生するのでしょうか?

  • Excelでの Dir

    excel VBAにて Dir関数を用いて、フォルダに存在するファイルを つかむのに、下記のスクリプトがあります。(渡辺ひかる氏のサンプル集)。 質問は、このスクリプトで引っ張り出されるファイルの順番です。本を色々調べたのですが、順番は、「不明」とあります。 しかし、現実は、アルファベット順? に並んでいるように思われます。 本当のところは、どうなんでしょう? 「不明」なのか、それとも「順番が成立している」のか? よろしくお願いします。 ---------------------------------------- Option Explicit Sub P_Sample003() Dim myPath As String Dim myFileName As String Dim i As Long myPath = ThisWorkbook.Path & "\" '任意のフォルダ myFileName = Dir(myPath, 0) Do While Len(myFileName) > 0 Debug.Print myPath & myFileName myFileName = Dir() Loop End Sub

  • Dir 関数で複数条件を指定するには?

    Sub Sample() Dim MyFileName As String Dim MyFolderName As String MyFolderName = "C:\Windows" MyFileName = Dir(MyFolderName & "\*.exe" Or MyFolderName & "\*.dll") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop End Sub このような感じで、拡張子がexeとdllファイルを書き出すことは無理なのでしょうか? このコードを実行すると、実行時エラー13が発生します。

  • フォルダの中のファイル数を取得するには vba

    手作業でフォルダのプロパティからファイルの数を確認することはできるのですが VBAで(FSOなど)、該当のフォルダの中に何個ファイルが入ってるかを確認するコードはありますか? Sub test() Dim MyFileName As String Dim MyFolderName As String Dim i As Long MyFolderName = "\○○\icon" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" MyFileName = Dir() i = i + 1 Loop MsgBox i End Sub このようなコードを作ってみたのですが、 画像のように実際に目で確認したファイル数と一致しません。 正しい数が取得できるvbaコードはありますか?

  • 複数フォルダに格納されたファイル名取得VBA

    お世話になっております。 あるフォルダに複数のフォルダが格納されており、更にそのフォルダの中にあるファイルの情報を取得するプログラムを書いたのですが、実行すると下記のようなエラーとなってしまいます。 ■エラー プロシージャの呼び出し、または引数が不正です 下から3行目、「buf = Dir()」が問題であることはわかるのですが、 何が問題でどのように解決したらいいかわかりません。 どなたかご教授の程よろしくお願い致します(>_<) ------------------------------------------------------------------------ Sub test() Dim buf As String Dim fName As String Dim msg As String buf = Dir("*.*", vbDirectory) Do While buf <> "" If GetAttr(buf) And vbDirectory Then If buf <> "." And buf <> ".." Then fName = Dir(CurDir & "\" & buf & "\" & "*.jpg") Do While fName <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = fName msg = msg & buf & "\" & fName & vbCrLf fName = Dir() Loop MsgBox msg End If End If buf = Dir() Loop End Sub ------------------------------------------------------------------------ これが実現できないと細かい作業を毎日繰り返す事となり、 かなり業務不可が高いです。。 繰り返しになってしまいますが、どなたかご回答よろしくお願い致します。

  • ExelVBA Dirでのファイル名検索について

    VBA勉強中の者です。早速ですが質問させて頂きます。 CドライブのSample Picturesという様々な形式の画像があるフォルダの中から、 jpgとpngの画像のみ名前をsheet4のA1から下方向に書き出したいと考え、 サイトや本で調べながら以下のコードを作成しました。 Sub sample() Worksheets(4).Cells.Clear Dim pngFileName As String Dim jpgFileName As String Dim CellsCount As Long Const path As String = "C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\" pngFileName = Dir(path & "*.png") Do While pngFileName <> "" CellsCount = CellsCount + 1 Cells(CellsCount, 1) = pngFileName pngFileName = Dir() Loop jpgFileName = Dir(path & "*.jpg") Do While jpgFileName <> "" CellsCount = CellsCount + 1 Cells(CellsCount, 1) = jpgFileName jpgFileName = Dir() Loop End Sub 一応目的は達成出来ているのですが、スッキリできません。 Dir(path & ~ の部分で、ワイルドカードの指定文字が "*.jpg" と "*.png" の2種類ある時には わざわざDo White Loopを2回繰り返しさないといけいないのか疑問です。 仮に画像ファイルだけでなく、何種類もの拡張子を指定して抽出したい時には そのつどコードを増やさないといけないのでしょうか? 考えた末 PictFileName = Dir(path & "*.jpg" Or path & "*.png")や PictFileName = Dir(path & "*.jpg" Or "*.png")などとしてみましたが 型が一致しないというエラーが出てしまいました。 もっとシンプルに分かり易くしたいです、どなたかご助力お願いいたします。 当方Excel2003を使用しております。

  • VBのDir関数について

    VB6.0について質問です. Dir関数にてフォルダ内のファイルを参照したいのですがうまくいきません>< 最初のファイルは参照できるのですが次のファイルへの参照ができません。。。 下記のコードでおかしいところはあるでしょうか? path = "d:\ABC\data" item = Dir(path & "\*.mdb", vbDirectory) Do While item <> "" ' ループを開始します。 item = Dir ' 次のフォルダ名を返します。 Loop

  • Dir関数について

    MyPath = "c:\test\" MyName = Dir(MyPath, vbDirectory) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then Debug.Print MyName End If MyName = Dir Loop ------------------------------------------------- いきなりコーディングを紹介しましたが、 上記だと"C:\test\"の直下のファイル・フォルダしかデバッグアウトされませんが、 "C:\test\sample"のように、"C:\test\"配下にまだフォルダがあり、 それらを表示させるにはどのようにしたらよろしいでしょうか? 大変見づらくて申し訳ありませんが、宜しくお願い致します。

  • DIR関数を使ったファイル名の取得

    おはようございます。 txtファイル名とdocファイル名を取得したく、以下のコードを作成してみました。 DIR関数を使って、ファイルリストボックスのPatternプロバディのように、複数の形式のファイル名を同時に取得する方法はあるのでしょうか? 是非、教えてください。よろしくお願いします。 ----------------------------- Private Sub Form_Load() Dim MyName MyName = Dir("C:\My Documents\*.txt") Do While MyName <> "" MsgBox MyName MyName = Dir Loop MyName = Dir("C:\My Documents\*.doc") Do While MyName <> "" MsgBox MyName MyName = Dir Loop End End Sub -------------------------------------

専門家に質問してみよう