• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Dir 関数で複数条件を指定するには?)

Dir関数で複数条件を指定する方法は?

このQ&Aのポイント
  • VBAのDir関数を使用して複数条件を指定する方法について教えてください。
  • 例えば、拡張子がexeとdllのファイルを書き出すことは可能でしょうか?
  • また、このコードを実行すると実行時エラー13が発生します。その原因も知りたいです。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。 確実に拡張子を設定するならば、 >If Right(MyFileName, 3) = "exe" Or Right(MyFileName, 3) = "dll" Then を If Right(MyFileName, 4) = ".exe" Or Right(MyFileName, 4) = ".dll" Then にしてください。まさか"hoge.hogeexe"だとか"hoge.hogedll"のような まがいものは紛れ込まないとは思いますが。

fibwrhhzlc7
質問者

お礼

そうします! ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

無理にDir関数をこじ開けるより、 素直に以下のようにする方法でどうですか? Windows以下のファイルを検索し、ファイル名の 末尾がexeのものとdllのものを取り出す、という 仕様です。 Sub Sample()   Dim MyFileName As String   MyFileName = Dir("C:\Windows\", 0)   Do While MyFileName <> ""     If Right(MyFileName, 3) = "exe" Or Right(MyFileName, 3) = "dll" Then       Debug.Print MyFileName     End If     MyFileName = Dir()   Loop End Sub

fibwrhhzlc7
質問者

お礼

あ・・・そうですね。 dirを通過してからifしちゃえばいいですね。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • FSOのDateCreatedプロパティで撮影日時

    FSOのDateCreatedプロパティで撮影日時の取得はできますか? フォルダの中のファイルの撮影日時の一覧を取得したいのですが Sub Sample() Dim MyFileName As String Dim MyFolderName As String MyFolderName = "C:\Users\1\Documents\【写真】" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" Debug.Print MyFileName Debug.Print CreateObject("scripting.filesystemobject").GetFile(MyFolderName & "\" & MyFileName).DateCreated MyFileName = Dir() Loop End Sub これで日付は取得できるのですが、この取得した日付は撮影日時を言ってるのでしょうか? 全て画像ファイルで、撮影日時を取得したいのですが正しいのかどうなのかわかりません。

  • 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

  • VBA 一つのフォルダの中のフォルダ名とファイル名

    一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?

  • (VBA) Dir 関数で取得するファイル一覧の順序

    タイトルの通り、下記のサンプルコードを実行して取得するファイル一覧の順序についての質問です。 Public Sub Test1() Dim WSH As Object Dim MyPath As String Dim MyFileName As String Set WSH = CreateObject("WScript.Shell") MyPath = WSH.SpecialFolders("MyDocuments") MyFileName = Dir(MyPath & "\" & "*.*") Do Until MyFileName = "" MsgBox MyFileName MyFileName = Dir Loop Set WSH = Nothing End Sub (質問) ファイル名の昇順では取得できないようですが、もしファイル名の昇順に並べ替えるとしたら、 どのように処理したらよいのでしょうか?

  • フォルダの中のファイル数を取得するには 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コードはありますか?

  • 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がある事によってどういう効果があるのかもわかりません。

  • データを書きだす→範囲を指定してピボットテーブル

    「データを書きだす→範囲を指定してピボットテーブルを作成する」 と言う二つのプロシージャーをいっきにやってるのですが、 二つに区切って実行すると問題ないのですが、一気に実行すると実行時エラーが発生します。 ------------------------------------------------------------- Sub tset() Call 全てのファイル名と作成日時を取得する Call ピボテを作成する End Sub Sub ピボテを作成する() ActiveWorkbook.Names.Add Name:="範囲の名前", RefersToR1C1:="=Sheet1!R1C1:INDEX(Sheet1!C2,COUNTA(Sheet1!C1))" ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="範囲の名前"). _ CreatePivotTable TableDestination:="", TableName:="ピボットテーブル", _ DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) End Sub Sub 全てのファイル名と作成日時を取得する() Dim MyRow As Integer Dim MyFileName As String Dim MyFolderName As String Workbooks.Add Cells(1, 1) = "ファイル名" Cells(1, 2) = "作成日時" MyRow = 2 MyFolderName = "C:\Users\Documents" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" Cells(MyRow, 1) = MyFileName Cells(MyRow, 2) = CreateObject("scripting.filesystemobject").GetFile(MyFolderName & "\" & MyFileName).DateCreated MyFileName = Dir() MyRow = MyRow + 1 Loop End Sub ------------------------------------------------------------- このコート度実行すると ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="範囲の名前"). _ で、 実行時エラー 1004 "指定したシートには既に同じ名前のピボットテーブル レポートが存在します" になります。 しかし、Workbooks.Addをやっているので、上記のエラーはありえないはずです。 そしてこの実行時エラーが出た後は、デバッグ→F5で、最後まで問題なく実行されます。 エクセルのバージョンは2003です。2007でも試しましたが同じ結果でした。 エラーを無視以外での対処方法をご教授ください。

  • FileDateTime

    Dim MyFileName As String Dim MyPath As String Dim NewName As String Dim objFS As FileSystemObject Dim objFol, shellObj, folderObj, MyFolderName, myFile Dim New撮影日時 As String Sub test() MyFileName = "C:\Users\写真" Set objFS = CreateObject("Scripting.FileSystemObject") Set shellObj = CreateObject("Shell.Application") With objFS With .GetFolder(MyFileName) For Each MyFolder In .SubFolders MyPath = MyFileName & "\" & MyFolder.Name & "\" Set objFol = objFS.GetFolder(MyPath) Set folderObj = shellObj.Namespace(MyPath) MyFileName = Dir(MyPath & "*.*") Do While MyFileName <> "" ’ここでエラー New撮影日時 = FileDateTime(MyPath & folderObj.ParseName(MyFileName)) MyFileName = Dir() Loop Next End With End With Set objFS = Nothing End Sub このコードは何が変ですか? 写真フォルダに入っているサブフォルダの写真ファイルの撮影日時を取得したいのですが FileDateTime(MyPath & folderObj.ParseName(MyFileName)) で 実行時エラー_91「オブジェクト変数またはWithブロック変数が設定されていません」 になります。 原因がわかりません。 オフィス2010、アクセスです。

  • 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を使用しております。

  • 実行時エラー 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 プロシージャーの呼び出し、または引数が不正 が発生します。 ファイル名をただ読み込んでるだけなのに、どうしてエラーが発生するのでしょうか?

専門家に質問してみよう