• ベストアンサー

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

nishi6の回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

少し書き込んでみました。 ●問題点1 FileSearchでは、*PROFILE.xls も見つかってしまう。(仕様だと思うが。。。) ●問題点2 FileSearchでは、複数のファイルが見つかることを想定している。(質問は都合で、最初のファイルのみを表示されているのかもしれません) ●問題点3 サブフォルダも検索する指定なので、見つかったファイル名を直接照合するとおかしな結果になる。 下では、 ●問題点1:複数のファイルの完全一致を調べている。 ●問題点2:完全一致を調べるためにフォルダ名を除いている。 ●問題点3:サブフォルダも調べるはずですが、ここにあったとして、どのような処理にするかは分からないので、何もしていません。 Sub Test_1()   Dim i As Integer '// カウンタ   Dim checkFileExist As Boolean '// ファイルがあったか      With Application.FileSearch     .NewSearch     .LookIn = "A:\"     .SearchSubFolders = True     .Filename = "PROFILE.xls"          '// 見つけたファイルをすべて照合     checkFileExist = False     If .Execute() > 0 Then       For i = 1 To .FoundFiles.Count         '// ドライブ、フォルダ名を削除して照合         '// *PROFILE.xls も見つかるので再チェック         checkFileExist = FileExist(.Filename, .FoundFiles(i))         If checkFileExist Then           MsgBox Application.FileSearch.FoundFiles(i) & "あった"           Exit For         End If       Next     End If          If Not checkFileExist Then       MsgBox "Aドライブに[PROFILE.xls]を保存してね"     End If   End With End Sub Function FileExist(ByVal schFN As String, ByVal FN As String)   Dim p As Integer, pot As Integer      '// 一番右の『\』を探す   pot = 0   For p = Len(FN) To 1 Step -1     If Mid(FN, p, 1) = "\" Then       pot = p: Exit For     End If   Next      '// ファイル名だけで比較   FileExist = False   If schFN = Right(FN, Len(FN) - pot) Then     FileExist = True   End If End Function

mocmocc
質問者

お礼

ご提示いただいた例でも実現することができました。ご丁寧にご回答ありがとうございました!

関連するQ&A

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

    お世話になります。指定のフォルダーではなく自分で選択したフォルダー内の"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

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

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

  • EXCEL2000 フォルダ内のファイルを検索

    EXCEL2000 フォルダ内のファイルを検索 お分かりになる方がいましたらお力添えの程よろしくお願いします。 任意のフォルダ内で任意のファイルサーチが出来るマクロを実行したいのですが、ファイルサーチの値を全角、半角、大文字、小文字区別なく行いたいのです。 例えば,セル2,2に、topと入力したら、topもtopもTOPもTOPも検索対象に引っかかり、セルに書き出して欲しいのです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub ファイル一覧2() Dim vntF As Variant Dim objFS As FileSearch Dim objFSO As FileSystemObject Dim GYO As Long Dim cntFound As Long Set objFS = Application.FileSearch ' FileSearch Set objFSO = New FileSystemObject ' FSO Rows("5:65536").ClearContents Application.ScreenUpdating = False GYO = 4 With objFS .NewSearch .LookIn = Trim(Cells(1, 2).Value) ' Search開始フォルダ .Filename = Trim(Cells(2, 2).Value) ' 探索ファイル式 .SearchSubFolders = True ' サブフォルダも探索 ' 処理開始 If .Execute() <> 0 Then For Each vntF In .FoundFiles With objFSO.GetFile(vntF) GYO = GYO + 1 Cells(GYO, 1).Value = .Name Cells(GYO, 2).Value = .DateLastModified Cells(GYO, 3).Value = _ Left(.Path, Len(.Path) - Len(.Name) - 1) cntFound = cntFound + 1 End With Next vntF End If End With Set objFS = Nothing Set objFSO = Nothing ' 処理結果の表示 If cntFound = 0 Then MsgBox "見つかりません" Else MsgBox cntFound & "個見つかりました" End If End Sub

  • Excel2007で、ディレクトリ付きファイル一覧をシート出力するマクロ

    Excel2003で、以下のソースを使い、シート上にディレクトリ付きファイル一覧を作成していたのですが、Excel2007では使えなくなりました。代替方法はありませんか? Sheets("Sheet10").Range("A1:Z6000").Clear With Application.FileSearch .newSearch .LookIn = "C:\works" .filename = "*.html" .SearchSubFolders = True Sheets("Sheet10").Select CSVMAX = .FoundFiles.Count For result = 1 To CSVMAX Sheets("Sheet10").Cells(result, 1) = .FoundFiles(result) Next End With

  • 複数検索方法

    マクロ(Excel)にて検索できるものを作成しています。 例えばネットワークドライブにて割り当てたH22(Zドライブ)~H1(Gドライブ)というフォルダがあり、UserForm1にてH22~H1のチェックボックスを作成しています。ここでH22とH21のチェックボックスにチェックを入れキーワードを入力し検索すると、H22とH21のフォルダ内になるキーワードと同じファイル名をフォルダ名と同じのシートに検索結果を表示したいです。 しかし、下記のようにすると、1つずつの検索は可能なのですが、複数チェック(H22とH21)入れると H22を検索し終わった後、もう一度キーワードを入力しないとH21を検索してくれません。 複数チェックし1回のキーワード入力で検索するにはどうすれば良いですか? 説明が下手ですが、よろしくお願いします。 Private Sub CommandButton1_Click() If CheckBox1 = True Then Sheets("H22").Visible = True Sheets("H22").Select With Application.FileSearch .NewSearch .LookIn = "Z:\" buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf .SearchSubFolders = True If .Execute() > -5 Then MsgBox .FoundFiles.Count - 5 & " 個のファイルが見つかりました", vbOKOnly, "検索結果" For 検索結果 = 6 To .FoundFiles.Count Cells(検索結果, 3) = .FoundFiles(検索結果) Next 検索結果 Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing For i = 6 To 検索結果 Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 3).Value End With Next i ElseIf CheckBox2 = True Then Sheets("H21").Visible = True Sheets("H21").Select With Application.FileSearch .NewSearch .LookIn = "Y:\" buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf .SearchSubFolders = True If .Execute() > -5 Then MsgBox .FoundFiles.Count - 5 & " 個のファイルが見つかりました", vbOKOnly, "検索結果" For 検索結果 = 6 To .FoundFiles.Count Cells(検索結果, 3) = .FoundFiles(検索結果) Next 検索結果 Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing For i = 6 To 検索結果 Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 3).Value End With Next i  ・  ・  ・ End If End Sub

  • 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

  • エクセルVBA:取得したファイル情報を別シートに貼るには・・・

    いつもお世話になっています。 今エクセルVBAで指定したフォルダ内のファイル情報を取得し、sheet2に貼り付けるものを作っています。 指定したフォルダ内のファイル情報を取得するまでは分かったのですが、作ったVBAを実行するとsheet1のA2セルから自動的に貼り付けられてしまいます。 sheet2のA1セルから貼り付けるにはどうすれば良いのでしょうか?? 作ったVBAはこんな感じです。 まず、フォルダのパスを取得しA2セルへ表示します。 Sub test2()  With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub Range("A2").Value = .SelectedItems(1) End With End Sub 次に、A2セルの値を使ってファイル名を取得しました。 Sub Test() Dim i As Long Dim pass As String pass = Range("A2").Value With Application.FileSearch .NewSearch .LookIn = pass .FileType = msoFileTypeAllFiles .SearchSubFolders = True If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + 1, 1) = .FoundFiles(i) Cells(i + 1, 3) = FileDateTime(.FoundFiles(i)) Next i 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

  • Excel VBAのFileSearch機能

    初めて投稿します。助けてください。 以下のVBAを使用して業務を行っているのですが このマクロが動かなくなってしまいました。 ネット等で調べてわかったのですが XP問題で社内PCがすべて変わりExcelも2013になってしまい 2013では、下記に記載されているFileSearch機能が使用できないようです。 出来れば下記の分をExcel2013でも 動くようにどの部分を変更すればいいいか教えていただけないでしょうか? ---------------------<VBA文>------------------------- Sub 作成() Dim i, j, no As Integer Dim Mpath, Mname, Mfull As String Mpath = ActiveWorkbook.Path Mname = ActiveWorkbook.Name Mfull = Mpath & "\" & Mname Worksheets("一覧").Select Range("A2:A200").Clear With Application.FileSearch .NewSearch .LookIn = Mpath .Filename = "*.xls" .FileType = msoFileTypeExcelWorkbooks If .Execute > 0 Then For i = 1 To .Execute If .FoundFiles(i) <> Mfull Then Cells(i + 1, 1).Value = .FoundFiles(i) j = Len(Cells(i + 1, 1)) If j > 218 Then MsgBox ("218文字を超えてます。") Exit Sub End If End If Next i Else MsgBox ("見つかりませんでした。") End If End With   Range("A2").Select Range("A2:A1000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub