• 締切済み

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

みんなの回答

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

こんなに長いコードを質問に挙げる必要があるのですか。焦点がぼける。一応これで動くのでしょう。 この作業内容(フォルダ内の全ファイルを1つづつ掴む)のコードはWEB照会すれば、沢山在るものだ。Dir利用型とFSO利用型がある。 ーーー 焦点は >値を全角、半角、大文字、小文字区別なく、にあるのでしょう。 それは下記のコードのようなことを思いつかないだけでしょう。 ーー 1つのセルで検索すべきも文字列が決ったとき Sub test01() a = "top" MsgBox a MsgBox StrConv(a, vbWide) MsgBox StrConv(a, vbNarrow) MsgBox UCase(a) MsgBox LCase(a) End Sub を参考にすれば良いでしょう。 セルにある文字列を上記の文字列に、変化させ、今ある文字列と同じものは其れで良いとして、他の文字列(例えば全角に変化させたときの文字列)と等しいかIF文で聞けば仕舞いではないのか。

全文を見る
すると、全ての回答が全文表示されます。
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

・探索対象を全ファイルにする。 ・探索されたファイル名と入力した値を全角・大文字に変換してから比較し、一致した場合だけ書き出す。 全角・半角の変換関数は、JIS,ASC 大文字・小文字の変換関数は、UPPER,LOWER

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

関連するQ&A

  • ファイルを探すプログラムで c:\のみ動かない

    ファイルを探すプログラムをネット頂き テストしたのですが c:\ のみ 動かず c:\*** は そのフォルダーから下を探します e:\ は 全てのフォルダーを探します。 WIN8 ですが どこで間違ってるのでしょうか? よろしくどうぞ Option Explicit Private g_dteDate As Date Private g_strEXT As String '参照設定 M-Scripting.Runtime Cells(1, 2).Value に 探すアドレス 記載 c:\  e:\  c:\*** など Sub Sample_FileSearch2()   Dim vntF As Variant Dim objFSO As FileSystemObject Dim dteDate As Date Dim GYO As Long Dim cntFound As Long Set objFSO = New FileSystemObject ' FSO Rows("5:65536").ClearContents GYO = 4 ’ g_dteDate = DateAdd("m", Cells(3, 2).Value * -1, Date) 更新 不要 g_strEXT = UCase(Trim(Cells(2, 2).Value)) ' ルートフォルダから探索開始 Call Sample_FileSearch2_SUB(objFSO, _ objFSO.GetFolder(Trim(Cells(1, 2).Value)), GYO, cntFound) Set objFSO = Nothing ' 処理結果の表示 If cntFound = 0 Then MsgBox "見つかりません" Else MsgBox cntFound & "個見つかりました" End If End Sub '''******************************************************************************* ''' ファイル探索処理(再帰動作) '''******************************************************************************* Private Sub Sample_FileSearch2_SUB(objFSO As FileSystemObject, _ ByVal objFolder As Folder, _ GYO As Long, cntFound As Long) Dim objFolder2 As Folder Dim objFile As File ' サブフォルダの探索 For Each objFolder2 In objFolder.SubFolders ' サブフォルダ個々の探索(再帰動作) Call Sample_FileSearch2_SUB(objFSO, objFolder2, GYO, cntFound) Next objFolder2 ' このフォルダ内のファイルの探索 For Each objFile In objFolder.Files ' ここから条件判断 With objFile If (UCase(objFSO.GetBaseName(.Path)) = g_strEXT) Then 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 If End With Next objFile End Sub

  • ファイル名を合成すると検索できないのでしょうか?

    下記のような式がありまして、一度作成したファイルは上書きされないはずですが何回やっても上書きされてしまいます。 これはファイルを検索していないのでしょうか? 既にファイルがあったら終了するはずですが何か間違えていますか? 'ファイル作成 Sub MakeCopyFile(newfile As String, orgfile As String) If SearchFile(newfile) Then Exit Sub End If Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile orgfile, newfile End Sub ' ファイル検索 Function SearchFile(fname As String) As Boolean SearchFile = False Set fs = Application.FileSearch With fs .Filename = fname If .Execute() > 0 Then SearchFile = True End If End With End Function Sub Macro1() Dim name As String '名前 Dim fname As String 'ファイル名 Dim directory As String '作成先ディレクトリ Dim fullpath As String 'フルパス Dim orgfile As String '雛形のファイル名 Dim editbook As Workbook '個人データブック Dim id As String '番号 directory = "H:\test\" orgfile = "H:\test\雛形.xls" For i = 1 To 100 name = ThisWorkbook.Worksheets("Sheet2").Cells(i, 10).Value id = ThisWorkbook.Worksheets("Sheet2").Cells(i, 12).Value If name = "" Then Exit For End If 'コピーしたファイルを作成する fname = name + id + ".xls" 'ファイル名合成 fullpath = directory + fname 'フルパス合成 Call MakeCopyFile(fullpath, orgfile) 'ファイル作成 Workbooks.Open Filename:=fullpath Set editbook = Workbooks(fname) editbook.Worksheets("Sheet3").Cells(8, 14).Value = name editbook.Worksheets("Sheet3").Cells(8, 10).Value = id '※(その他必要な処理があれば追加してください) editbook.Close (True) Next i End Sub

  • フォルダー名一覧を作成するVBAでのエラー

    ここで教えていただいたフォルダー名一覧を作成するVBAがあります。 共有ドライブやMyDocumentなどのサブフォルダーは綺麗に階層別に抜き出してくれて助かっています。 ところが、Cドライブ(ローカルディスク)に対して実行すると必ず「実行時エラー70 書き込みできません」になります。 ワークシートにそれまで記入されたフォルダー名を見ると [Config.Msi] となっています。 ただエクスプローラで見てもConfig.Msiというフォルダーは見当たりません。 おそらく隠しフォルダーなのでしょう。 Cドライブを検索する場合、隠しフォルダーは広わなくてもいいので、エラーにならないようするにはどう直せばよいのでしょうか? エクセル2000です。 ' [参照設定]・Microsoft Scripting Runtime Option Explicit Private g_cntPATH As Long Sub SEARCH_FOLDER() Dim objFSO As FileSystemObject Dim strPATHNAME As String Dim myObj As Object Dim myDir As String Set myObj = CreateObject("Shell.Application"). _ BrowseForFolder(0, "フォルダを選択してください", 0) If myObj Is Nothing Then Exit Sub If myObj = "デスクトップ" Then myDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") Else myDir = myObj.Items.Item.Path End If strPATHNAME = myDir Cells.ClearContents Set objFSO = New FileSystemObject Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME), 0, 0) Set objFSO = Nothing MsgBox "処理が完了しました。" & vbCr & vbCr & _ "フォルダ数=" & g_cntPATH & vbCr, vbInformation End Sub 'フォルダ単位のサブ処理(再帰動作,引数はFile-Object,行,カラム) Private Sub SEARCH_SUB_FOLDER(ByVal objPATH As Folder, ByRef GYO As Long, ByVal COL As Long) Dim objPATH2 As Folder g_cntPATH = g_cntPATH + 1 '参照フォルダ数を加算 GYO = GYO + 1 ' 行を加算 COL = COL + 1 ' カラムを加算 Cells(GYO, COL).Value = "[" & objPATH.Name & "]" For Each objPATH2 In objPATH.SubFolders 'サブフォルダを探索するループ処理 Call SEARCH_SUB_FOLDER(objPATH2, GYO, COL) 'フォルダ単位のサブ処理(再帰呼び出し) ’←ここでエラー Next objPATH2 Set objPATH = Nothing ' 参照OBJECTを破棄 End Sub

  • 画像ファイル名をパス付きで表示

    Sub Test2() Dim objFSO As Object Dim sPath As String, sSubFol As String, sFileName As String Dim nRow As Long, nCol As Long Set objFSO = CreateObject("Scripting.FileSystemObject") sPath = "C:\Users\Owner\Downloads\base\setting_000002016\" nRow = 2 sSubFol = Cells(nRow, 1).Text Do While sSubFol <> "" nCol = 11 sFileName = Dir(sPath & sSubFol & "\*.jpg") If objFSO.FileExists(sPath & sSubFol & "\" & sSubFol & ".jpg") Then nCol = 12 Else nCol = 11 End If Do While sFileName <> "" If sFileName = sSubFol & ".jpg" Then Cells(nRow, 11) = sFileName Else Cells(nRow, nCol) = sFileName nCol = nCol + 1 End If sFileName = Dir() Loop nRow = nRow + 1 sSubFol = Cells(nRow, 1).Text Loop Set objFSO = Nothing End Sub こちらは商品番号とサブフォルダの名前が一致したらフォルダ内のファイル名を抽出するというマクロですが、これをパス付で表示という動作をするにはどこをいじればよろしいでしょうか?

  • 複数のフォルダ内の名前や作成日等をリスト化する方法

    複数のフォルダ内の名前や作成日等をリスト化する方法 こんにちは。 以下に示しますマクロは フォルダ内の名前や作成日等(サブディレクトリを含む)をリスト化するもので 以前同サイト内で教えて頂きました。 現在このマクロでは シート1のAセルにフォルダのパスを入力して実行すると、 シート2にフォルダ内の情報がリスト化されます。 このマクロでは1つのフォルダ内の情報をリスト化することが可能ですが、 今回は更に、 エクセルのA列にフォルダのパスを複数個入力し、 それらのフォルダ内の情報を、それぞれ別シートに 一気にリスト化したいと考えています。 ご存じの方がいらっしゃいましたら よろしくお願いいたします。 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"     Case Else       MsgBox err.Number & vbCrLf & err.Description   End Select      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing End Function

  • ファイル名をエクセルにリスト化するマクロの応用

    ファイル名をエクセルにリスト化するマクロの応用 こんにちは。 以下に示しますマクロは フォルダ内の名前や作成日等(サブディレクトリを含む)を エクセルにリスト化するもので 以前同サイト内で教えて頂きました。 現在このマクロでは シート1のAセルにフォルダのパスを入力して実行すると、 シート2にフォルダ内の情報がリスト化されます。 このマクロでは1つのフォルダ内の情報をリスト化することが可能ですが、 今回は更に、 エクセルのA列にフォルダのパスを複数個入力し、 それらのフォルダ内の情報を、それぞれ別シートに 一気にリスト化したいと考えています。 ご存じの方がいらっしゃいましたら よろしくお願いいたします。 プログラミングに関する知識はほとんどありません… 具体的に、どこに何を入力するのかを教えていただけると嬉しいです。 お手数をおかけし、すいません。 ※以下は以前nicotinismさんに回答いただいたマクロを 参考にさせていただいております。 Sub makeFileList()   Call fileList   MsgBox "終了しました" Columns.AutoFit 'すべての列幅を自動調整する End Sub    Function fileList(Optional trgDir As String = "", Optional fCnt As Long = 0)   On Error GoTo err   Dim objFs As Object   Dim objDir As Object   Dim objFile As Object   Dim i As Long      Set objFs = CreateObject("Scripting.FileSystemObject")      If trgDir = "" Then     Set objDir = objFs.Getfolder(Sheets("sheet1").Range("a1"))   Else     Set objDir = objFs.Getfolder(trgDir)   End If      Set objFile = objDir.Files        With Sheets("sheet2")     For Each objFile In objDir.Files         fCnt = fCnt + 1 .Cells(fCnt, 1).Offset(1, 0) = fCnt .Cells(fCnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(fCnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(fCnt, 4).Offset(1, 0) = objFile.Path .Range("A1").Value = "No" .Range("B1").Value = "作成日" .Range("C1").Value = "更新日" .Range("D1").Value = "ファイル名"     Next objFile          For Each objDir In objDir.SubFolders       If objDir.Attributes <> 22 Then   'システムフォルダ除外                      '--------------サブフォルダの再帰検索             Call fileList(objDir.Path, fCnt)           '--------------サブフォルダの再帰検索                End If     Next objDir   End With      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing Exit Function err:   Select Case err.Number     Case 76 ' path がない       MsgBox "path 指定が間違っています"     Case Else       MsgBox err.Number & vbCrLf & err.Description   End Select      Set objFile = Nothing   Set objDir = Nothing   Set objFs = Nothing End Function

  • 異なるファイルからの情報を齟齬がないかを調べる。

    こんばんは。VB初心者です。お聞きしたいのですが、2つの異なるファイルからの情報に齟齬がないかをマクロで調べたいのですが(できればIF関数やEXACTを使わないで)、どうもうまくいきません。 例えば、下のような情報がSHEET1にある場合、 File1 Apple    Orange Banana Plum    Mango Cucumber Carrot Tomato Lettus Mellon File2 Orange Apple  Banana Plum Mango Cucumber Carrot Tomato Mellon Lettus マクロを使って、下のように結果を求めたいのですが、どのワークシートファンクションを使えばいいのかわかりません。マッチングやテストもあるのですが、どうもよくわかりません。 FALSE FALSE TRUE  TRUE TRUE TRUE    TRUE TRUE FALSE FALSE 自分で少し考えてみたのですが、アドバイスをよろしくお願いします。 Sub Test() Dim lngLine As Long Dim lngTest As Long   Worksheets("Sheet1").Select GYO1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1 GYO2 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 2 lngTest = 0 If Len(Range("A2")) > 0 Then lngLine = Range("A1").End(xlDown).Row lngTest = WorksheetFunction.???????? End If Range(Cells(GYO1, 1), Cells(GYO1, 1000)).Value = lngTest Range(Cells(GYO2, 1), Cells(GYO2, 1000)).Value = lngTest End Sub

  • 検索マクロ

    下記のマクロは、検索文字でシートを検索し、そのセルアドレス情報を シートを追加して表示する機能ですが、BOOK全体に検索し、シート名を含めて表示するには、xxxxのところをどのように変更すればいいか。よろしくお願いします。 Sub kennsaku_Macro1() Dim ret Dim r As Range Dim adr As String Dim cnt As Long Dim psw As Boolean Dim mySht, adSht, ws As Worksheet Set mySht = ActiveSheet ret = Application.InputBox("検索文字列を入力してください") If TypeName(ret) <> "Boolean" Then With mySht.Cells Set r = .Find(ret, LookIn:=xlValues, lookat:=xlPart) If Not r Is Nothing Then adr = r.Address cnt = 2 '2行目から表示 xxxxxxxxxxxxx For Each ws In Worksheets If ws.Name = "検索結果" & ret Then psw = True Exit For End If Next ws If psw Then Set adSht = ws adSht.Cells.ClearContents Else Set adSht = Worksheets.Add adSht.Name = "検索結果" & ret End If adSht.Cells(cnt, 1).Value = r.Value adSht.Cells(cnt, 2).Value = xxxx 'シート名 adSht.Cells(cnt, 3).Value = adr Do Set r = .FindNext(r) If r.Address = adr Then Exit Do Else cnt = cnt + 1 adSht.Cells(cnt, 1).Value = r.Value adSht.Cells(cnt, 2).Value = xxxx 'シート名 adSht.Cells(cnt, 3).Value = r.Address End If Loop End If End With End If adSht.Cells(1, 1).Value = "項目" adSht.Cells(1, 2).Value = "シート名" adSht.Cells(1, 3).Value = "セルアドレス" mySht.Activate End Sub

  • VBA DO~While LOOPを解除したい

    いつもお世話になります。 すみません、下記のコードで 、DO~While LOOP ステートメントを解除して、一回だけ 実施するようなコードに修正したいのですが、自分ではうまく修正できません。 どうか修正したコードを教えていただけないでしょうか。 Sub ShowBarCode() Dim xlAPP As Application Dim GYO As Long Dim objOLEObject As OLEObject Dim objBarCode As BARCODELib.BarCodeCtrl Dim lngLeft As Long Dim lngTop As Long Dim intHeight As Integer Dim intWidth As Integer Dim sh As Worksheet Set xlAPP = Application xlAPP.ScreenUpdating = False xlAPP.Calculation = xlCalculationManual xlAPP.Interactive = False On Error GoTo ERROR_EXIT GYO = 66 Do While Cells(GYO, 99).Value <> "" Cells(GYO, 100).Select ' 現在セルの位置を取得 With ActiveCell lngLeft = .Left + .Width * 0.05 lngTop = .Top + 1 intHeight = .height * 0.7 intWidth = .Width * 6.9 End With ' 現在セルにバーコードを貼付ける ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _ Link:=False, DisplayAsIcon:=False, _ Left:=lngLeft, Top:=lngTop, Width:=intWidth, _ height:=intHeight).Select Set objOLEObject = Selection Set objBarCode = objOLEObject.Object With objOLEObject .Visible = False ' 一旦消去 .Placement = 2 .Visible = True ' 表示 End With With objBarCode .Style = 2 ' JAN-13 .SubStyle = 0 .Validation = 1 ' C/D修正有り .ShowData = 0 ' 数値表示なし .Value = Cells(GYO, 100).Value .Refresh End With Cells(GYO, 100).FormulaR1C1 = "=LEFT(RC1,7)&"" ""&RIGHT(RC1,6)" GYO = GYO + 1 Loop Cells(1, 1).Select xlAPP.Interactive = True xlAPP.Calculation = xlCalculationAutomatic xlAPP.ScreenUpdating = True Exit Sub ERROR_EXIT: xlAPP.Interactive = True xlAPP.Calculation = xlCalculationAutomatic xlAPP.ScreenUpdating = True MsgBox Err.Description End Sub

  • セルの値でフォルダやファイル名とファイルの内容2

    昨日質問させていただいて、大丈夫とおもったら、 問題がでてきましたので、再度質問させてください。 (昨日のは締め切ってしまったので。。。) ===やりたい事==== セルの値で フォルダやファイル名とファイルの内容を一気に保存したいのですが、 どうしても式がわかりません。。 やりたいことはここにまとめてます。 ↓ http://bsmile.sakura.ne.jp/phptest/cc1.jpg 1 A列のフォルダと作って、 2 B行のファイル名で、 3 C行の内容のファイルを作りたいのです。 ===問題点==== 昨日質問させていただいて こちらのマクロで動くようになり ↓↓↓↓↓↓↓↓↓↓↓↓↓ csvならこの程度、、、 Option Explicit Sub Ottotto() Const xPath0 = "C:\Users\user\Desktop\test\" Dim xSheet As Worksheet Dim xPath As String Dim xName As String Dim xText As String Dim nn As Integer Application.DisplayAlerts = False Set xSheet = ActiveSheet For nn = 1 To xSheet.Range("A" & Rows.Count).End(xlUp).Row xName = xSheet.Cells(nn, "B").Value xText = xSheet.Cells(nn, "C").Value xPath = (xPath0 & xSheet.Cells(nn, "A").Value & "\") If (Dir(xPath, vbDirectory) = vbNullString) Then MkDir xPath End If ChDrive (Left(xPath, 1)) ChDir (xPath) With Workbooks.Add Worksheets(1).Cells(1, "A").Value = xText .SaveAs (xPath & xName & ".csv") .Close False End With Next Application.DisplayAlerts = True End Sub できた.csvファイルは確かにエクセルでひらけたので すっかり、安心していたのですが、 たとえば、できたcsvファイルをメモ帳やテラパッドのようなエディターで開いたら 「NULLがどーの」と文字化けの塊みたいになります。 基本的にできたファイルはメモ帳などで開きたいのですが、、、、 多分スクリプトの書き込む際の文字コードだとおもうのですが、 With Workbooks.Add Worksheets(1).Cells(1, "A").Value = xText .SaveAs (xPath & xName & ".csv") .Close False このあたり、どうスクリプトを書込めばいいかわかりません。 どなたかおしえていただけないでしょうか?? どうぞよろしくお願いいたします。