Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1072to1076
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suchen in bestimmten Zellen von mehreren Dateien

Suchen in bestimmten Zellen von mehreren Dateien
05.05.2009 10:30:21
mehreren
Hallo Excel und VBA Profis.
Dies ist mein erster Beitrag in diesem Forum - ich bin zu anderen Fragen bereits fündig geworden (erstklassiges Forum!), jedoch bin ich bei meinem aktuellen Problem mit meinem Latein am Ende und hoffe Ihr könnt mir weiterhelfen.
Ich habe ein digitales Archiv mit ca. 17.000 Excel- Dateien verteilt auf die Jahre 2003 bis 2009. Jede Exceldatei besteht aus ca. 10 - 20 Arbeitsmappen, wobei die erste Mappe immer! als 'Arbeitskarte' benannt ist.
Zelle A1 enthält meine gesuchte Information. Ich bräuchte also eine Suchfunktion (evtl. mit VBA?) in der ich den Suchbereich einschränken kann. "Suche nach dem Begriff "XY" in allen Excel- Dateien eines Ordners, jedoch nur in Zelle A1 der Mappe 'Arbeitskarte'".
Leider steht die Information an mehreren Stellen der Excel- Datei in einer Tabelle mit allen anderen auszuschließenden Informationen. z.B.: Gesucht ist "XY". In einer Tabelle von Mappe 2 steht "XW", "XX", "XY" und "XZ".
Lasse ich die Suchfunktion von Windows arbeiten "ein Wort oder einen Begriff innerhalb der Datei suchen", dann gibt sie mir viel zu viele Treffer aus, welche andere Werte in Zelle A1 beinhalten.
Ich bin für jede Antwort und jeden Denkanstoß dankbar. Leider lassen meine VBA Kenntnisse zu wünschen übrig. Programmvorschläge einzubinden wäre kein Problem :)
Mit freundlichen Grüßen,
korner.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
05.05.2009 10:39:46
mehreren
Öhem ja ... ein wenig mehr Infos wären nett. ;)
1. Wie ist die Ordnerstruktur in denen die Arbeitsmappen liegen? Also liegen die alle in einem Ordner, oder gibt es einen Hauptordner mit mehreren Unterordnern oder liegen die Mappen gar quer verteilt über verschiedene Hauptordner?
2. Enthält immer NUR die Zelle A1 im Sheet Arbeitskarte die gesuchte Information? Kann nämlich gerade mit Deinem Zusatz "Leider steht die Information an mehreren Stellen ... " nicht wirklich was anfangen. ;)
3. Wie sieht die Zeichenfolge die in Zelle A1 gespeichert ist aus? Gibt es Regeln nach denen die Zeichenfolge aufgestellt ist?
4. Wie sieht die gesuchte Zeichenfolge genau aus?
Gruß
Rainer
Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
05.05.2009 11:07:34
mehreren
1. Wie ist die Ordnerstruktur in denen die Arbeitsmappen liegen? Also liegen die alle in einem Ordner, oder gibt es einen Hauptordner mit mehreren Unterordnern oder liegen die Mappen gar quer verteilt über verschiedene Hauptordner?
Es gibt einen Hauptordner 'ARCHIV' mit den Unterordnern '2003', '2004', ... , '2008', '2009'
Wenn es für die Lösung des Problems einfacher ist, dann kann man auch einen beliebigen neuen Ordner mit allen Dateien darin erstellen. Das wäre kein großer Aufwand.
2. Enthält immer NUR die Zelle A1 im Sheet Arbeitskarte die gesuchte Information? Kann nämlich gerade mit Deinem Zusatz "Leider steht die Information an mehreren Stellen ... " nicht wirklich was anfangen. ;)
Nein, dieselbe Datei enthält beispielsweise in der Arbeitsmappe 'Vergleichstabelle' in mehreren Zellen den gleichen Wert wie in der Mappe 'Arbeitskarte' die Zelle A1, oder in der Mappe 'Arbeitkarte' beispielsweise die Zelle Z4.
3. Wie sieht die Zeichenfolge die in Zelle A1 gespeichert ist aus? Gibt es Regeln nach denen die Zeichenfolge aufgestellt ist?
In Zelle A1 steht keine Formel, nur folgende Möglichkeiten an Zeichenfolgen:
5X (bis zu drei Ziffern, Buchstabe - also auch 15X oder 100X)
5X/Y (bis zu drei Ziffern, Buchstabe, Schrägstrich, Buchstabe - also auch 15X/Y...)
ABC51 (Drei Buchstaben, zwei bis drei Ziffern)
ABC51/Y (Drei Buchstaben, zwei bis drei Ziffern, Schrägstrich, Buchstabe)
Ist es eventuell möglich nach der Methode "Die Zelle enthält..." zu suchen, um Schrägstrich und den nachfolgenden Buchstaben zu vernachlässigen?
4. Wie sieht die gesuchte Zeichenfolge genau aus?
siehe 3.
Danke für die schnelle Antwort
Mfg, korner.
Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
05.05.2009 12:40:10
mehreren
Probiere es mal so:
Option Explicit
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare

Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" ( _
ByVal pidl As Long, _
ByVal pszPath As String) As Long
Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" ( _
lpBrowseInfo As BROWSEINFO) As Long


Function OrdnerAuswahl() As String
Dim bInfo As BROWSEINFO
Dim strPath As String
Dim lngR As Long
Dim lngX As Long
Dim intPos As Integer
bInfo.pidlRoot = 0&
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus"
bInfo.ulFlags = &H1
lngX = SHBrowseForFolder(bInfo)
strPath = Space$(512)
lngR = SHGetPathFromIDList(ByVal lngX, ByVal strPath)
If lngR Then
intPos = InStr(strPath, Chr$(0))
OrdnerAuswahl = Left(strPath, intPos - 1)
Else
OrdnerAuswahl = ""
End If
End Function



Sub OrdnerLesen()
Dim fso As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fDateien As Object
Dim sPfad As String
Dim sSuche As String
Dim sMappe As String
' Suchbegriff eingeben
sSuche = InputBox _
("Bitte geben Sie den zu suchenden Begriff ein: ", "Suchbegriff")
' Suchbegriff checken
If sSuche = "" Then
MsgBox "Sie haben keinen Suchbegriff eingeben!"
Exit Sub
End If
' Ordner in dem gesucht werden soll festlegen
sPfad = OrdnerAuswahl & "\"
On Error GoTo ErrHandler
' Objects setzen
Set fso = CreateObject("Scripting.FileSystemObject")
Set fVerz = fso.GetFolder(sPfad)
Set fDateien = fVerz.Files
' Jede Mappe lesen, dann öffnen und im Sheet "Arbeitskarte" Zelle A1 prüfen ob Suchstring  _
beinhaltet
For Each fDatei In fDateien
Workbooks.Open Filename:=fDatei
' um eindeutige Zuordnung zum späteren Schliessen zu haben
sMappe = ActiveWorkbook.Name
If InStr(Workbooks(sMappe).Sheets("Arbeitskarte").Range("A1"), sSuche) > 0 Then
' Hier Anweisung was nun geschehen soll wenn die Suchbedingung wahr ist
MsgBox "Gefunden!"
End If
' schliessen ohne speichern
Workbooks(sMappe).Close SaveChanges:=False
Next fDatei
Exit Sub
ErrHandler:
MsgBox "Es tratt folgender Fehler auf: " & Err.Number & vbLf & _
Err.Description
End Sub


Alles in ein Modul reinkopieren.
Der Teil mit der Ordnerauswahl stammt aber nicht von mir, sondern ist ein Code den ich hier im Forum mal gefunden habe.
Rückmeldung ob es passt wäre nett. ;)
Gruß
Rainer

Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
05.05.2009 14:17:02
mehreren
Hallo Rainer,
also vom Prinzip her funktioniert es großartig - das ist schon mal ein riesengroßer Schritt!
Suchbegriffeingabe und Ordnerwahl funktionieren sehr gut.
Nur leider habe ich noch ein Problem mit der Ausgabe des Suchergebnisses.
Ich gebe beispielsweise den Suchbegriff ABC57 ein. Wenn dieser in einer Datei (in Zelle A1) gefunden wird, dann wird die Datei geöffnet und es erscheint eine MsgBox mit "Gefunden!".
Wenn ich tausend Dateien in einem Ordner durchsuche, dann kommt ABC57 etwa 50mal vor. Ich benötige dann die Dateinamen der Suchtreffer. Diesen muss ich mir dann immer abschreiben und mit OK die Suche fortsetzen.
Gibt es eine Möglichkeit ähnlich der Suchfunktion bei Windows eine Liste mit den Dateinamen der gefundenen Dateien auszugeben? Beispielsweise in ein geöffnetes Excel Sheet?
Und wenn das nicht möglich ist, kann man dann eventuell einen zweiten Suchbegriff in Zelle L8 definieren, um die Ergebnisse weiter einzuschränken? Vom Prinzip: Wenn in Zelle A1 dies steht und in Zelle L8 jenes steht dann...
Mit freundlichen Grüßen,
und vielen, vielen Dank für die schnelle, kompetente Hilfe,
korner.
Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
05.05.2009 14:53:28
mehreren
Kopiere folgende Code in die

Sub Ordnerlesen rein, der alte Code muss dabei komplett gelöscht sein.


Sub OrdnerLesen()
Dim fso As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fDateien As Object
Dim sPfad As String
Dim sSuche As String
Dim sSuche2 As String
Dim sMappe As String
Dim I As Integer
On Error GoTo ErrHandler
' Suchbegriff 1 eingeben
sSuche = InputBox _
("Bitte geben Sie den ersten zu suchenden Begriff ein: ", "Suchbegriff")
' Suchbegriff checken
If sSuche = "" Then
MsgBox "Sie haben keinen ersten Suchbegriff eingeben!"
Exit Sub
End If
' Suchbegriff 2 eingeben
sSuche2 = InputBox _
("Bitte geben Sie den zweiten zu suchenden Begriff ein: ", "Suchbegriff")
' Suchbegriff checken
If sSuche2 = "" Then
MsgBox "Sie haben keinen zweiten Suchbegriff eingeben!"
Exit Sub
End If
' Ordner in dem gesucht werden soll festlegen
sPfad = OrdnerAuswahl & "\"
' Objects setzen
Set fso = CreateObject("Scripting.FileSystemObject")
Set fVerz = fso.GetFolder(sPfad)
Set fDateien = fVerz.Files
' Ausgabebereich resetten
I = 10
With ActiveSheet
Do Until .Cells(I, 1).Value = ""
.Cells(I, 1).ClearContents
I = I + 1
Loop
End With
' Jede Mappe lesen, dann öffnen und im Sheet "Arbeitskarte" Zelle A1 + L8 prüfen ob Suchstring  _
1/2 beinhaltet
For Each fDatei In fDateien
Workbooks.Open Filename:=fDatei
If InStr(ActiveWorkbook.Sheets("Arbeitskarte").Range("A1"), sSuche) > 0 And _
InStr(ActiveWorkbook.Sheets("Arbeitskarte").Range("L8"), sSuche2) Then
' FullName in Variabele lesen
sMappe = ActiveWorkbook.FullName
' Ausgelesenes Workbook wieder schliessen ohne speichern
ActiveWorkbook.Close SaveChanges:=False
' sicherstellen das richtiges Workbook aktiv ist
ThisWorkbook.Activate
' FullName in aktives Sheet schreiben
With ActiveSheet
.Range("A10").Select
Selection.EntireRow.Insert
ActiveCell.Value = sMappe
End With
End If
Next fDatei
Exit Sub
ErrHandler:
MsgBox "Es tratt folgender Fehler auf: " & Err.Number & vbLf & _
Err.Description
End Sub


Der Code schreibt Dir nun die gefundene Mappe in das Feld "A10" der Mappe aus dem Du das Makro startest rein. Findet er mehrere Mappen dann werden alle Mappen aufgelistet.
Und Du kannst einen zweiten Suchbegriff eingeben, der ist allerdings in diesem Code eine Pflichteingabe. Also es werden nur Mappen gefunden die beide Suchstrings beinhalten.
Passt's so?
Gruß
Rainer

Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
06.05.2009 12:56:20
mehreren
Hallo Rainer,
die Erweiterung mit dem zweiten Suchbegriff funktioniert zwar, aber jetzt werden alle Dateien des Ordners in dem gesucht wird nach und nach geöffnet,
aber nicht mehr geschlossen - außer die Dateien mit Suchtreffer, denn diese werden geschlossen!
Im geöffneten Arbeitsblatt wird jedoch kein Treffer vermerkt...
Ich habe einen Testordner mit 10 Dateien angelegt, bei denen 2 mit den Suchbegriffen übereinstimmen. Am Ende des Makros werden also 8 Dateien
geöffnet angezeigt, außer die beiden gesuchten. Das Arbeitsblatt aus dem das Makro ausgeführt wird
zeig keine Veränderung!
Ich hoffe, dass ich nix falsch gemacht habe...
Vielleicht kannst Du ja nochmal den Code überprüfen?
Vielen Dank im Voraus!!
Mit freundlichen Grüßen,
korner.
Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
06.05.2009 15:10:12
mehreren
AUA .. böses Foul, hatte doch die Close Anweisung so geschrieben, dass sie nur für Treffer gilt. ^^
Habe ich geändert und da ich gerade dabei war, habe ich auch die Möglichkeit eingebaut das Du entweder nach Suchbegriff 1 oder nach Suchbegriff 1 UND 2 suchen kannst. Willst du nur nach Suchbegriff 1 suchen, dann lass einfach Eingaben Suchbegriff 2 leer und drück OK.
Zum Thema Anzeige im Arbeitsblatt ... ich habe das ActiveSheet als Ausgabe angewählt gehabt. Hab es nun so gemacht, dass immer das erste Sheet in der Mappe in der das Makro drinnen ist als Ausgabesheet angewählt ist. Bei mir funktioniert es auf jeden Fall ... probiere es jetzt nochmal aus und gib Rückmeldung ob es jetzt auch die Ausgabe anzeigt.
Hier nochmal der komplette Code:
Option Explicit
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare

Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" ( _
ByVal pidl As Long, _
ByVal pszPath As String) As Long
Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" ( _
lpBrowseInfo As BROWSEINFO) As Long


Function OrdnerAuswahl() As String
Dim bInfo As BROWSEINFO
Dim strPath As String
Dim lngR As Long
Dim lngX As Long
Dim intPos As Integer
bInfo.pidlRoot = 0&
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus"
bInfo.ulFlags = &H1
lngX = SHBrowseForFolder(bInfo)
strPath = Space$(512)
lngR = SHGetPathFromIDList(ByVal lngX, ByVal strPath)
If lngR Then
intPos = InStr(strPath, Chr$(0))
OrdnerAuswahl = Left(strPath, intPos - 1)
Else
OrdnerAuswahl = ""
End If
End Function



Sub OrdnerLesen()
Dim fso As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fDateien As Object
Dim sPfad As String
Dim sSuche As String
Dim sSuche2 As String
Dim sMappe As String
Dim cMappe As String
Dim i As Integer
On Error GoTo Err_Handler
' Suchbegriff 1 eingeben
sSuche = InputBox _
("Bitte geben Sie den ersten zu suchenden Begriff ein: ", "Suchbegriff")
' Suchbegriff checken
If sSuche = "" Then
MsgBox "Sie haben keinen ersten Suchbegriff eingeben!"
Exit Sub
End If
' Suchbegriff 2 eingeben
sSuche2 = InputBox _
("Bitte geben Sie den zweiten zu suchenden Begriff ein: ", "Suchbegriff")
' Suchbegriff 2 nicht checken, da er ruhig leer bleiben kann
' Ordner in dem gesucht werden soll festlegen
sPfad = OrdnerAuswahl & "\"
' Objects setzen
Set fso = CreateObject("Scripting.FileSystemObject")
Set fVerz = fso.GetFolder(sPfad)
Set fDateien = fVerz.Files
' Ausgabebereich resetten
i = 10
With ActiveSheet
Do Until .Cells(i, 1).Value = ""
.Cells(i, 1).ClearContents
i = i + 1
Loop
End With
' Jede Mappe lesen, dann öffnen und im Sheet "Arbeitskarte" Zelle A1 + L8 prüfen ob Suchstring  _
1/2 beinhaltet
For Each fDatei In fDateien
Workbooks.Open Filename:=fDatei
' FullName in Variabele lesen
sMappe = ActiveWorkbook.FullName
cMappe = ActiveWorkbook.Name
'Klären ob nach einem oder nach zwei Kriterien gesucht werden soll
If sSuche2 > "" Then GoTo ZweierVergleich
' Ein Kriterium in A1 checken
If InStr(ActiveWorkbook.Sheets("Arbeitskarte").Range("A1"), sSuche) > 0 Then
' dieses Workbook und Tabellenblatt 1 aktivieren
ThisWorkbook.Activate
Sheets(1).Activate
' FullName in aktives Sheet schreiben
With ActiveSheet
.Range("A10").Select
Selection.EntireRow.Insert
ActiveCell.Value = sMappe
End With
End If
' Wenn Einservergleich durchlaufen, dann ZweierVergleich überspringen
GoTo Weiter
ZweierVergleich:
' Kriterium in A1 und Kriterium 2 in L8 checken
If InStr(ActiveWorkbook.Sheets("Arbeitskarte").Range("A1"), sSuche) > 0 And _
InStr(ActiveWorkbook.Sheets("Arbeitskarte").Range("L8"), sSuche2) Then
' dieses Workbook und Tabellenblatt 1 aktivieren
ThisWorkbook.Activate
Sheets(1).Activate
' FullName in aktives Sheet schreiben
With ActiveSheet
.Range("A10").Select
Selection.EntireRow.Insert
ActiveCell.Value = sMappe
End With
End If
Weiter:
Workbooks(cMappe).Close SaveChanges:=False
Next fDatei
Exit Sub
Err_Handler:
MsgBox "Es tratt folgender Fehler auf: " & Err.Number & vbLf & _
Err.Description
End Sub


Gruß
Rainer

Anzeige
AW: Suchen in bestimmten Zellen von mehreren Dateien
08.05.2009 08:47:06
mehreren
Vielen Dank Rainer!!
Es funktioniert alles wunderbar. DANKE!!!
Es dauert zwar etwas (ca. 1 Sekunde pro Datei - bei 3.000 Dateien im Ordner also etwa 50 Minuten),
weil jede Datei einzeln geöffnet wird, aber das wird sich nicht ändern lassen. Ich habe zusätzlich noch eine
Unterdrückung der Warnmeldung für die Aktualisierung von Verknüpfungen eingebaut.
Alles in Allem ist das aber eine großartige Sache, dass Du mir so gut weiterhelfen konntest.
Weiter so!! ;)
Mit freundlichen Grüßen,
Andreas.

334 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige