• ベストアンサー

【ファイルサーチ】指定のフォルダーではなく自分で選択したフォルダー内のファイルの総数をカウントしたい

お世話になります。指定のフォルダーではなく自分で選択したフォルダー内の"csvファイル"の総数をカウントしたいのですがうまくいきません。アドバイスお願いいたします。 With Application.FileSearch .LookIn = Application.GetOpenFilename .Filename = "*.csv" If .Execute > 0 Then MsgBox .FoundFiles.Count & "個" End If For i = 1 To .FoundFiles.Count MsgBox .FoundFiles(i) Next i End With

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 Wendy02 さんのものは、「フォルダ選択ダイアログ」を使っていて、ご希望 の「フォルダの選択」という動作にはピッタリだと思います。 しかし、フォルダ内に CSV ファイルがあることをダイアログで確認できる、 「GetOpenFilename メソッドを使いたい」ということでしょうか? FileSearch オブジェクトの LookIn プロパティーには「フォルダのパス」 を設定しなければなりませんので、GetOpenFilename メソッドで得られた 「ファイルのパス」をそのまま設定することはできません。 したがって、得られた「ファイルのパス」から「フォルダのパス」を切り 出す必要があります。以下のサンプルは InStrRev 関数を使った例です。 strPATH = Application.GetOpenFilename("csvファイル (*.csv), *.csv") If UCase$(strPATH) = "FALSE" Then   Exit Sub End If 'InStrRev関数 - Excel2000以上で有効 'ファイル名からフォルダパスを切り出し strPATH = Mid$(strPATH, 1, InStrRev(strPATH, "\") - 1) With Application.FileSearch   .LookIn = strPATH   .Filename = "*.csv"   .Execute   MsgBox .FoundFiles.Count & "個"   If .FoundFiles.Count > 0 Then     For i = 1 To .FoundFiles.Count       MsgBox .FoundFiles(i)     Next i   End If End With

tetsufumosan
質問者

お礼

こんばんは、いつも回答ありがとうございます。上記例で解決できました!感謝しています。ありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 以下のようなサンプルはいかがでしょうか? '-------------------------------- Sub myFileSearchTest()   Dim myFolder As Object   Dim myFolderItem As String   Dim Msg As String   Dim i As Long   Set myFolder = CreateObject("Shell.Application"). _   BrowseForFolder(0, "フォルダを選択してください", 0, "C:\")   If Not myFolder Is Nothing Then    myFolderItem = myFolder.Items.Item.Path    Else    Exit Sub   End If   With Application.FileSearch    .LookIn = myFolderItem    .FileName = "*.csv"    If .Execute > 0 Then      Msg = .FoundFiles.Count & "個"    End If    For i = 1 To .FoundFiles.Count      Msg = Msg & vbCrLf & .FoundFiles(i)    Next i   End With   Set myFolder = Nothing   MsgBox Msg End Sub '--------------------------------

tetsufumosan
質問者

お礼

ありがとうございます。無事解決できました。

tetsufumosan
質問者

補足

いつも回答いただきましてありがとうございます。 下記メゾットで自分でファイルを選択してファイル数をサーチする事は可能でしょうか? OPENFILE = Application.GetOpenFilename("csvファイル (*.csv), *.csv")

関連するQ&A

  • VBAで、[.FoundFiles.count]で取得した値の変数Cへの渡し方

    VBAで、[.FoundFiles.count]で取得した値を C=.FoundFiles.count(理想) としたいです。そして以下のコードのFor文の.FoundFiles.countをCとしたいのですが、思うようにいきません。その方法を教えて頂きたいのです。宜しくお願い致します。 With Application.FileSearch .LookIn = largept .Filename = "*.txt" If .Execute > 0 Then   For i = 1 to .FoundFiles.Count     ...     処理     ...   Next i Else End If End With

  • VBAのFileSearchでFoundFiles(i)の作成日時を取得したい

    タイトルどおりですが、Fileオブジェクトには DateCreatedプロパティーがあるようですが、 どこでこれを使用していいのかわかりません。 したのはHELPのサンプルですが、どうしたらいい ものでしょうか? With Application.FileSearch If .Execute() > 0 Then MsgBox .FoundFiles.Count & _" 個のファイルが見つかりました。" For i = 1 To .FoundFiles.Count Debug.Print .FoundFiles(i) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With

  • Access2007でFile Searchが使えなくなり大変困ってい

    Access2007でFile Searchが使えなくなり大変困っています。 行いたい内容は以下です。 1.ボタンを押下し、指定したフォルダのファイル一覧画面を出す 2.一覧画面のファイル名に直近のファイル名を表示させる ・Access2000(VBA)でのコード Set fs = Application.FileSearch With fs .lookin =Path  'Path=D:¥system¥file .FileName ="*.xls" If Execute() > 0 Then File = foundfiles(.foundfiles.Count) Else File = "" End With ネットで検索すると、FileSystemObjectで対応できるとのことですが、よく分かりません。 File Searchを使わずにFileSystemObjectを使うとどのように書くのでしょうか。 どうぞ宜しくお願いします。

  • FileSearchがエクセル2007で使えなくなって困っています。

    2003では普通に使えたのですが、2007で使うためにはどのように変えればいいのでしょうか?途方にくれているのでVBAに詳しい方ご教授ください。処理文で回答頂けるとうれしいです。 Public Sub p_更新() For i = 1 To 100: gwKillFL(i) = "": Next i With Application.FileSearch .LookIn = gAAFLD .SearchSubFolders = True .Filename = "*T" & Format(gBB, "00") & ".txt" .FileType = msoFileTypeAllFiles If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count gwKillFL(i) = .FoundFiles(i) Call p_ReadData(.FoundFiles(i)) Next i For i = 1 To .FoundFiles.Count If gwKillFL(i) <> "" Then Kill gwKillFL(i) End If Next i If gMenu1 > 0 Then Range("A2").Select MsgBox "更新", vbOKOnly, "確認" End If Else If gMenu1 > 0 Then MsgBox "更新ファイルなし。", vbOKOnly, "確認" End If End If End With End Sub

  • ワイルドカードの記述が、原因でしょうか?

    下記コードが、ついこの前までは、きちんと "A?07??????.CSV" を読み込んでたんですが、 今は、 "検索条件を満たすファイルはありません。"  となってしまいます。 1、ワイルドカードの記述が、おかしいでしょうか? 2、フォルダ名は、漢字等はやめて、半角英数字にしたほうがよいのでしょうか? 3、このような、現象は、よくあることでしょうか? 以上 原因がわかりませんので、何卒ご教示くださいませ。 ----------------- Private Sub TEST() Dim myFS As FileSearch Dim i As Long ChDir "C:\Documents and Settings\Owner\デスクトップ\ああ" Set myFS = Application.FileSearch With myFS .LookIn = "C:\Documents and Settings\Owner\デスクトップ\ああ" .Filename = "A?07??????.CSV" If .Execute > 0 Then For i = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く Workbooks.OpenText Filename:=.FoundFiles(i), _ StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Comma:=True 'ああ.xlsブックに移動 Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

  • 【ExcelVBA】指定したファイル名をAドライブで検索

    エクセルVBAで、指定したファイル名のファイルをAドライブ直下で検索した場合、ワイルドカードを使ってないにも関わらず、ワイルドカード検索みたいな感じで結果がとれてしまいます。 ■Aドライブ直下 aaaPROFILE.xls testPROFILE.xls ■コード With Application.FileSearch .NewSearch .LookIn = "A:\" .SearchSubFolders = True .Filename = "PROFILE.xls" If .Execute() > 0 Then MsgBox Application.FileSearch.FoundFiles(1) & "あった" Else MsgBox "Aドライブに[PROFILE.xls]を保存してね" End If End With これを実行すると、「Aドライブに[PROFILE.xls]を保存してね」というメッセージが出てほしいのですが、「aaaPROFILE.xlsあった」とでてきてしまい、aaaPROFILE.xlsが検索結果にひっかかってしまいます。 これは何故でしょうか?どうしたら指定した文字列をビタで検索できるでしょうか? ご回答よろしくお願いいたします。

  • 改善コードを教えてください。

    EXCEL2003で作成したマクロが2010で下記のコードが動作しません。 どう修正したらいいか教えてください 。 できれば、具体的なコードを書いていただけると、助かります。 ' With Application.FileSearch ' .NewSearch ' .LookIn = TXP_hozon_saki ' .Filename = ".TXP" ' .SearchSubFolders = True ' ' If .Execute() = 0 Then ' MsgBox "TXPファイルなし", vbOKOnly, "参照ファイルエラー" ' Exit Sub ' End If ' For KensakuSuu = 1 To .FoundFiles.Count ' TXP_hozon_name(1, KensakuSuu) = .FoundFiles(KensakuSuu) ' Next KensakuSuu ' End With 上記コードは、拡張子.TXPというファイルを検索して、動作させるものです。

  • エクセル(VBA)でファイル名(サブフォルダ含む)、更新日時を表示させたい

    エクセルのVBAであるフォルダ以下の全てのファイル名と更新時間をエクセルシート上に表示させたく、以下のプログラムを作成したのですが 、サブフォルダ内のファイルを表示させることができません。何か良い方法がありましたら教えていただけないでしょうか?宜しくお願いいたします。 Sub SAMPLE() Dim serchPass As String j = 1 Mypath = "C:\My Documents\" MyName = Dir(Mypath, vbDirectory) Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then Debug.Print MyName ' フォルダであれば、それを表示します。 Else: GoTo 10 End If serchPass = Mypath & MyName With Application.FileSearch .NewSearch .LookIn = serchPass If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + j, 1).Value = .FoundFiles(i) Cells(i + j, 3) = FileDateTime(.FoundFiles(i)) Next i j = i + j End If End With 10 End If    MyName = Dir ' 次のフォルダ名を返します。 Loop End Sub

  • 複数のフォルダに、順次実行したいんですが?

    下記コードで(あるサイトにありました)、"C:\DATA"の中の複数のフォルダ(F1、F2、F3、変動あり、いまのところ3つまでです)へ、順次実行したいのですが、うまく出来ません。 Call を使用すれば、出来ますが、Call を使用しないで実行するにはどのように編集すればよろしいですか? 以上よろしくご教示くださいませ。 中部分は、省略しました。 ---------- Sub CSVtoXLS() Dim myFS As FileSearch Dim mySvWb As Workbook Dim i As Long ChDir "C:\DATA" Set myFS = Application.FileSearch With myFS .LookIn = "C:\DATA" .Filename = "*.csv" If .Execute > 0 Then '保存用ブックを追加 Workbooks.Add Set mySvWb = Workbooks(2) For i = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く        ・        ・     '保存用ブックを保存して閉じる mySvWb.SaveAs Filename:="CSV_hozon" mySvWb.Close Else '検索結果が0なら MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

  • Visual Basic Editorの実行時エラーのことについて教えてください。 

    Visual Basic超初心者ですがよろしくお願いします。 標準モジュールで入力したものを実行すると、必ず「実行時エラー "53": ファイルが見つかりません。」と表示してしまいます。 入力したものはミスはないと思うのですが、何回やってもエラーが出てしまいます。 わかる方いましたら教えてください。 入力したものを一応載せときます↓ Sub list_file() Dim numfile As Long Dim i As Long With Application.FileSearch .NewSearch .LookIn = Range("b1").Value .Filename = Range("b2").Value .SearchSubFolders = Range("b3").Value If .Execute() > 0 Then file_count = .FoundFiles.Count MsgBox file_count & "files exis" Worksheets.Add after:=Worksheets("sheet1") Range("a1").Value = "filename" Range("b1").Value = "date" Range("c1").Value = "size" For i = 1 To file_count Cells(i + 1, 1).Value = .FoundFiles(i) Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i)) Cells(i + 1, 3).Value = FileLen(.FoundFiles(i)) Cells(i + 1, 2).Value = Hex(Cells(i + 1, 3).Value) Next Columns("a:c").AutoFit Else MsgBox "no file exists" End If End With End Sub

専門家に質問してみよう