• ベストアンサー

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 -------------------------------------

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

VBのForm1の上にドライブ、ディレクトリ、ファイルリストボックスを 貼りつけ、それぞれのコントロールをダブルクリックして Private Sub Drive1_Change() Dir1.Path=Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path File1.Pattern = "*.txt;*.doc" End Sub Private Sub File1_Click() flnam= File1.FileName MsgBox flnam End Sub と入力して見ました。実行すると ファイルリストボックスに拡張子が「txt」と「doc」の2つが 現われます。そしてクリックして指定したファイル名が MsgBoxに現われます。 本件の質問は、この「Pattern」プロパティと、拡張子を列記する 方法「;」に付いての質問ではないのでしょうか。 「Pattern」の語が出ているので多分ご存知の様子ですね。 ----- またDir関数で下記を実行してみました。ご参考になれば。 Private Sub Form_Click() a = Dir("c:\My Documents\*.*") For i = 1 To 40  a = Dir()  a = Trim(a)  b = Right(a, 4)   If b = ".doc" Then      Form1.Print a   ElseIf b = ".txt" Then      Form1.Print a   End If Next i End Sub 仮に繰り返し回数を「40」としていますが、ファイル数より回数が進んだ時の「エラーの検知方法」が思い出せず不完全です。すみません。全般について、ご存知の方やダメな点を私も教わりたいです。

adachi
質問者

お礼

親身な回答していただき、本当にありがとうございます。 DIR関数の拡張子指定も"*.txt;*.doc" のようにできるればと思っていたのですが、imogasi様のようにIF文を使った方が無難そうですね。 リストビューコントロールにIEキャッシュ内のファイルの一覧を表示させようとしていました。DIR関数にこだわっていたのですが、ファイルリストボックスを表示させない形で利用した方が良いかな・・・ imogasi様のアドバイスを参考にもう一度挑戦してみようと思います。

adachi
質問者

補足

imogasi様、i-touch様、回答をくださいまして本当にありがとうございました。 (1)IF文で拡張子を区分する方法と(2)ファイルリストボックスで拡張子を区分する方法の両方を試してみました。 IEキャッシュの中からjpg・gifを取り出す作業をしてみたところ、(1)(2)ともに処理スピードはほぼ同じでした。 コードの記載は、ファイルリストボックス(visible=falseの状態)を使った方が楽で、把握しやすいことも分かりました。 imogasi様とi-touch様に対し、良回答の判断をしなければいけないのがとても心苦しかったです、、、、どうかお許しください。 今後もよろしくお願いします。

その他の回答 (2)

  • i-touch
  • ベストアンサー率40% (170/415)
回答No.3

こんにちは! もうできちゃったかな? プロシージャを載せます。 私のは、拡張子はもう少し厳密にチェックしています。 サンプルを元にしているので、著作権の一部はマイクロソフトにあると思います。 リストボックス「list1」をフォームに貼り付けてやってみてください。 この例ではexeのあるフォルダにある*txt,*docをリストアップします。 Private Sub getFlist() '■ ファイルのリストを取得する Dim zMyp As String Dim zFnm As String Dim zName As String Dim zKaks As String Dim nFnm As Long zMyp = App.Path & "\" List1.Clear '# リストボックスを初期化する zName = Dir(zMyp, vbNormal) '# 最初のファイル名を取得する Do While zName <> "" '#ループ開始 '# 現在のフォルダと親フォルダは無視する If zName <> "." And zName <> ".." Then '# 普通のファイルかどうか If (GetAttr(zMyp & zName) And vbNormal) = vbNormal Then zFnm = UCase(zMyp & zName) '# パス+ファイル名 zKaks = Right(zFnm, 3) '# 拡張子 '## 拡張子のフィルタリングを行う Select Case zKaks Case "DOC", "TXT" '# リストに追加!! List1.AddItem zFnm Case Else '# その他のファイル zFnm = "" End Select End If End If zName = Dir '# 次のファイル名を取得する Loop '# 取得したファイルの数 'nFs = List1.ListCount End Sub では!

adachi
質問者

お礼

imogasi様、i-touch様、回答をくださいまして本当にありがとうございました。 (1)IF文で拡張子を区分する方法と(2)ファイルリストボックスで拡張子を区分する方法の両方を試してみました。 IEキャッシュの中からjpg・gifを取り出す作業をしてみたところ、(1)(2)ともに処理スピードはほぼ同じでした。 コードの記載は、ファイルリストボックス(visible=falseの状態)を使った方が楽で、把握しやすいことも分かりました。 imogasi様とi-touch様に対し、良回答の判断をしなければいけないのがとても心苦しかったです、、、、どうかお許しください。 今後もよろしくお願いします。

adachi
質問者

補足

こんなにも詳しい解説付きのプロシージャを書いてくださいまして、なんてお礼を申したらよいのか・・・本当にありがとうございます。 今からコードを貼り付けて、実際に試してみます。明日・・・いや今日ですね(苦笑)今日中に結果報告させていただきます。 それでは、一旦失礼します、、、

  • i-touch
  • ベストアンサー率40% (170/415)
回答No.2

こんにちは 指定したフォルダ中の、ファイルのリストを取得するサンプルが、ヘルプで出てくると思います。 それを改造して、取得したファイル名から、IF文で、拡張子がdoc,txtのものだけリストに加えるようにすれば簡単ですよ。 私はリストボックスにAdditemで加えて、ファイルのリストを作っています。 では!

adachi
質問者

お礼

回答していただき、ありがとうございます。返信が遅くなってしまい、申し訳ありません、、、 DIR関数で複数の指定拡張子のファイル名を取得し、リストビューコントロールに表示させようしていました。ファイル名の取得にDIR関数を使っていたため、ファイルリストボックスコントロールでの「File.Pattern = "*.txt;*.doc" 」のように一つの文章にできないものか悩んでいました。 「リストボックスにAdditemで加えて、ファイルのリストを作っています」 この方法の方が、処理も早そうですね。imogasiさんに上手にまとめたif文と合わせて試し、後日結果報告をさせていただきます。

関連するQ&A

専門家に質問してみよう