Durchsuchen vieler Arbeitsmappen (Microsoft Excel)
Amit hat einen Ordner, der Hunderte von Excel-Arbeitsmappen enthält. Er muss alle Arbeitsmappen nach einem bestimmten Text durchsuchen und fragt sich, ob es eine Möglichkeit gibt, alle Arbeitsmappen zu durchsuchen und die Namen der Arbeitsmappen zu ermitteln, die den gewünschten Text enthalten, sowie die Zellen in den Arbeitsmappen, die diesen Text enthalten.
Es ist relativ einfach herauszufinden, welche Arbeitsmappen den gewünschten Text enthalten. Sie müssen lediglich die Suchfunktionen von Windows verwenden, um in einem einzelnen Ordner nach Dateien zu suchen, die den gewünschten Text enthalten. Die Zellenpositionen werden zwar nicht angezeigt, die Liste der Dateien wird jedoch angezeigt.
Natürlich können Sie ein Makro verwenden, um nach Ihnen zu suchen. (Es ist immer eine gute Idee, ein Makro zu verwenden, um die lange, mühsame Arbeit zu erledigen, die sonst manuell erledigt würde.) Im Folgenden werden alle Arbeitsmappen in einem Ordner durchgearbeitet und nach dem gesucht, was Sie suchen möchten. Es öffnet jede Datei, die auf xls * endet (das nachfolgende Sternchen bedeutet, dass nach xls-, xlsx- und xlsm-Dateien gesucht wird).
Sub SearchFolders() Dim fso As Object Dim fld As Object Dim strSearch As String Dim strPath As String Dim strFile As String Dim wOut As Worksheet Dim wbk As Workbook Dim wks As Worksheet Dim lRow As Long Dim rFound As Range Dim strFirstAddress As String On Error GoTo ErrHandler Application.ScreenUpdating = False 'Change as desired strPath = "c:\MyFolder" strSearch = "Specific text" Set wOut = Worksheets.Add lRow = 1 With wOut .Cells(lRow, 1) = "Workbook" .Cells(lRow, 2) = "Worksheet" .Cells(lRow, 3) = "Cell" .Cells(lRow, 4) = "Text in Cell" Set fso = CreateObject("Scripting.FileSystemObject") Set fld = fso.GetFolder(strPath) strFile = Dir(strPath & "\.xls") Do While strFile <> "" Set wbk = Workbooks.Open _ (Filename:=strPath & "\" & strFile, _ UpdateLinks:=0, _ ReadOnly:=True, _ AddToMRU:=False) For Each wks In wbk.Worksheets Set rFound = wks.UsedRange.Find(strSearch) If Not rFound Is Nothing Then strFirstAddress = rFound.Address End If Do If rFound Is Nothing Then Exit Do Else lRow = lRow + 1 .Cells(lRow, 1) = wbk.Name .Cells(lRow, 2) = wks.Name .Cells(lRow, 3) = rFound.Address .Cells(lRow, 4) = rFound.Value End If Set rFound = wks.Cells.FindNext(After:=rFound) Loop While strFirstAddress <> rFound.Address Next wbk.Close (False) strFile = Dir Loop .Columns("A:D").EntireColumn.AutoFit End With MsgBox "Done" ExitHandler: Set wOut = Nothing Set wks = Nothing Set wbk = Nothing Set fld = Nothing Set fso = Nothing Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description, vbExclamation Resume ExitHandler End Sub
Um die Routine an Ihre Bedürfnisse anzupassen, ändern Sie die Variable strPath, um den Pfad zu dem Ordner wiederzugeben, den Sie verarbeiten möchten, und ändern Sie strSearch, um den Text wiederzugeben, nach dem Sie suchen. Das Makro erstellt ein neues Arbeitsblatt und platziert „Treffer“ in jeder Zeile. Spalte A enthält den Arbeitsmappennamen, Spalte B den Arbeitsblattnamen, Spalte C die Zellenadresse und Spalte D den Inhalt dieser Zelle.
Offensichtlich braucht jedes Makro wie dieses ziemlich viel Zeit, um ausgeführt zu werden. Sie können die Zeit etwas verkürzen, indem Sie die Anzahl der zu durchsuchenden Dateien reduzieren. Der beste Weg, dies zu tun, ist die Verwendung des Windows-Suchansatzes (am Anfang dieses Tipps beschrieben), um die Arbeitsmappen zu identifizieren, in denen sich der gewünschte Text befindet. Verschieben Sie diese Arbeitsmappen in ihren eigenen Ordner und führen Sie dann die Makrosuche in diesem Ordner durch.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (5598) gilt für Microsoft Excel 97, 2000, 2002 und 2003.