gelöst Automat. Zusammenfassen von über 1500 Tabellen

Mitglied: inhwue

inhwue (Level 1) - Jetzt verbinden

26.11.2008, aktualisiert 01.12.2008, 7528 Aufrufe, 8 Kommentare

Hallo!

Ich hab mich erst seit einiger Zeit mit Excelmakros beschäftigt und stoße leider schon an meine Grenzen . Bräuchte eure Hilfe.

Also ich will Labordaten aus über 1500 Exceldateien zusammenführen. Die Tabellen sehen wie folgt aus:

|| || || || || ||
A B C D
1 Laborident 12.06.2007 06.06.2006 15.03.2005
2 AP37 71 68 81
3 BAS 0 0.4 0.5
4 BAS-A 0.02
5 BILIG 0.8 0.8 1.0


usw... aber in allen Tabellen sind nicht immer die gleichen Parameter bestimmt worden.
Auch ist in einer Tabelle z.B. nur von einem Datum eine Auswertung, in einer anderen sind (wie hier im Beispiel 3 Daten ausgewertet worden)

Zum Auslesen habe ich auch Makros gefunden, das klappt auch gut, allerdings nur immer für das erste Datum (also hier in Spalte B), denn ich weiß nicht wie ich programmieren, dass auch C, D usw. ausgelesen werden, wenn sich dort Werte befinden (erkenntlich daran, dass in der ersten Zeile das Datum befindet).

Ausserdem bräuchte ich in die erste Spalte des Auswertebogens den Dateinamen, aus dem die Daten stammen.
Die Dateinamen sehen wie folgt aus:
Mustermann_Karl-Friedrich_01.02.1962.xls
Oder ist es schwierig diese Dateinamen in ihre Bestandteile aufzuteilen? Also Name in eine Spalte, in die andere Vornamen und Gebdatum?

Ich weiß ich hab sehr viele Fragen gestellt, vielen Dank im vorraus, bin nämlich schon halb am verzweifeln...

Anbei das Makro was ich bisher zum Auslesen nutze:

Sub Auslesen()
Dim oMe As Object, sSuchbegriff(), sBereich As String, iZeile As Integer, sKennz As String
Dim iSbMax As Integer, iLK As Integer, i As Integer, sWbName As String, rFound As Range, vWert As Variant
Dim oFS As Object, oDatei As Object, wsTabelle As Worksheet, bEintrag As Boolean
Set oMe = ThisWorkbook.Worksheets("Tabelle1") 'Zieltabelle (in der gerade geöffneten Datei)
iZeile = 2 'ab dieser Zeile Ergebnisse in die Zieltabelle eintragen
Const sDateiPfad As String = "E:\Labordaten\" 'Pfad für zu durchsuchende Excel-Dateien; mit Backslash am Ende
sKennz = "" 'Nur Tabellen, deren Name mit dem Kennzeichen beginnt, verarbeiten
sSuchbegriff = Array("Laborident", "BZ", "CA", "CHOL", "CRP", "EIW", "HB", "HBA1C", "K") 'Liste der
Suchbegriffe
sBereich = "A1:A100"
iSbMax = UBound(sSuchbegriff) 'Höchster Index der Suchbegriffmatrix
iLK = Len(sKennz) 'Länge des Tabellennamen-Kennzeichens
Set oFS = CreateObject("Scripting.FileSystemObject")
For Each oDatei In oFS.GetFolder(sDateiPfad).Files
sWbName = oDatei.Name
Workbooks.Open (oDatei.Path)
For Each wsTabelle In Workbooks(sWbName).Worksheets()
If StrComp(Left(wsTabelle.Name, iLK), sKennz, vbTextCompare) = 0 Then
bEintrag = False
For i = 0 To iSbMax
Set rFound = wsTabelle.Range(sBereich).Find(sSuchbegriff(i), LookIn:=xlValues)
If Not rFound Is Nothing Then
vWert = wsTabelle.Cells(rFound.Row, rFound.Column + 4).Value
oMe.Cells(iZeile, i + 3).Value = vWert
bEintrag = True
End If
Next
If bEintrag Then iZeile = iZeile + 1 'mindestens ein Eintrag erfolgt, daher neue Zeile
End If
Next
Workbooks(sWbName).Saved = True
Workbooks(sWbName).Close
Next
End Sub
Mitglied: bastla
26.11.2008 um 14:37 Uhr
Hallo inhwue und willkommen im Forum!
... allerdings nur immer für das erste Datum
Die ursprüngliche Fassung des Makros hatte eine etwas andere Zielsetzung, daher wird nur jeweils eine Spalte übertragen.

Einige Fragen:
  • Befinden sich die Daten immer in der ersten Tabelle der jeweiligen Datei (würde das Überprüfen der restlichen Tabellen überflüssig machen - die Abfrage nach einem Kennzeichen im Tabellennamen wird ja, Deinem Code zufolge, ohnehin nicht benötigt)?
  • Sollen alle Zeilen der Quelltabelle übertragen werden, oder ist es auch in diesem Fall nötig, nur bestimmte Zeilen zu suchen?
    • Falls alle Zeilen benötigt werden: Hat jede Zeile einen Wert in Spalte A?
  • Sollen alle Werte einer Zeile übertragen werden?
  • Wo sollen die aus dem Dateinamen ermittelten Daten in der Zieltabelle genau platziert werden (welche 3 Zellen)?

Der Code zum Ermitteln der Namensteile (einzufügen nach Zeile 17) sähe etwa so aus:
Die Variablendeklarationen wären dann auch noch oberhalb zu platzieren (etwa nach Zeile 4):
Grüße
bastla

P.S.: Bitte verwende zum Posten von Programmzeilen die Code-Formatierung ...
Bitte warten ..
Mitglied: inhwue
26.11.2008 um 15:07 Uhr
Hallo Bastla!

Vielen Dank für deine schnelle Antwort!
Das mit den Namen, Vornamen und Gebdatum eintragen klappt!!

Also zu deinen Fragen:


Die Daten finden sich alle in Tabelle2 (wieso auch immer, Tabelle1 ist leer)

Zu der zweiten Frage: Die Sache ist, dass nicht zu bei jeder Person alle Werte im Labor ermittelt wurden, von daher ist jede Tabelle also solche individuell. Daher gibt es in Spalte A die Laboridentifikation: z.B. AP37, BAS, BZ usw... um zu wissen was für Werte sich in den darauffolgenden Spalten befinden!

Die Übertragung der Werte stelle ich mir so vor (um es zu veranschaulichen)

.

Das Problem ist aber leider das die Anzahl der Labore ganz unterschiedlich ist, manche haben nur eines, manche haben 10 verschiedene Daten, an den Labor abgenommen wurde

Name Vorname Geb.datum DatumLabor AP37 BAS
Mustermann Max 01.01.1950 12.06.2007 71 0
Mustermann Max 01.01.1950 06.06.2006 68 0.4

das Beispiel ist bezogen auf Werte der Tabelle ganz oben. Dateiname wäre Name_Vorname_01.01.1950.xls

Nochmal das Makro jetzt übersichtlicher (neu überarbeitet!):
Vielen Dank!

P.S. So sieht eine Originaldatei aus, wo es 2 Labore gab:
27de42942ff2c78fd876ebef24da70b7-excel_tabelle - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: Rafiki
26.11.2008 um 18:55 Uhr
Mir ist noch nicht klar was du denn nachher mit der einen Tabelle anstellen möchtest, die dann aus den ca. 150 kleineren besteht.
Ich könnte mir vorstellen, dass du eigentlich meinst die Daten auf eine logische Art zu verknüpfen. Dafür wäre dann ein LIMS (Labor Informations Management System) zuständig. Dabei würde sich ein LIMS z.B. auch merken aus welcher Datei die Daten stammen, zu welchem Messgerät gehören und von welchem Mitarbeiter erstellt gemessen wurden.
Sobald die Personendaten in irgendeiner Form sich auf eine Person (Patienten?) beziehen ist auch der Datenschutz wichtig. Ein LIMS könnte beispielsweise festlegen wer diese Personen beziehbaren Daten sehen darf und protokolliert wer diese verarbeitet hat.
Das sind Funktionen die weit über Excel hinausgehen. (Wobei ich glaube fast Bastla könnte das mit einem Makro regeln. Es scheint wohl nix zu geben was Bastla nicht mal eben schnell in einem Makro macht.)

Gruß Rafiki
Bitte warten ..
Mitglied: bastla
26.11.2008 um 18:57 Uhr
Hallo inhwue!

Soll tatsächlich für jede Datei eine eigene Überschriftszeile (in Deinem Beispiel
erzeugt werden?

Ich wäre davon ausgegangen, dass alle möglichen Laboridentifikationen vorgegeben und die entsprechenden Werte in die jeweiligen Spalten eingetragen würden ...

... oder sollten ohnehin nur bestimmte Werte (lt Deinem Code wären dies, im Widerspruch zum obigen Beispiel, nur "BZ", "CA", "CHOL", "CRP", "EIW", "HB", "HBA1C" und "K") übernommen werden?
Kann davon ausgegangen werden, dass (so wie im abgebildeten Tabellenblatt) die Datumswerte immer in Zeile 1 ab Spalte E und die einzelnen Messwerte dann ab Zeile 2 angeführt sind, und dies ohne Leerzeilen, sodass als Ende des Datenblockes die Zeile mit der letzten Eintragung in Spalte A angenommen werden kann?

Grüße
bastla

P.S.: Meine Ungenauigkeit hinsichtlich der Zerlegung des 3. Namensbestandteiles hast Du erfreulicher Weise schon beseitigt - ich hatte nicht beachtet, dass für das Datum Punkte als Trennzeichen verwendet werden ...
Bitte warten ..
Mitglied: bastla
26.11.2008 um 19:07 Uhr
@Rafiki
Du machst mich noch ganz verlegen ...
... auf jeden Fall danke für die Blumen.

Deine Hinweise sind sicher wichtig, wobei ich eigentlich vermutet hätte, dass die entstehende Zusammenfassung ein Zwischenschritt für eine weitere Verarbeitung (in Datenbankform) wäre - deshalb auch meine Überlegung, einen einheitlichen Satzaufbau ("... alle möglichen Laboridentifikationen ...") zu verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: inhwue
26.11.2008 um 20:16 Uhr
Hallo!

Vielen Dank für die große Resonanz! und auch so schnell...

@bastla:
Nein, so hatte ich das nicht gedacht, es soll insgesamt nur eine Überschriftenzeile geben:

Also

NameVornameGebdat.LabdatWert1Wert2Wert3...Wert70
MustermannMax04.12.6023.06.08562...2
MustermannMax04.12.6014.07.06125...4
Beispiel2NN01.01.4013.03.081 4...6
Beispiel3MM04.04.6615.07.06125...
Beispiel3MM04.04.6618.07.0612.55...5

Herr Mustermann ist der von dem jpeg-Bild. Man sieht da auch 2 Labore, nämlich vom 23.06.08 und vom 14.07.06. Im Gegesatz zu Beispiel2 hier gabs nur 1 Labor, d.h. bei seiner xls-file waren nur Werte in der Spalte E, Spalte F(wo ein 2tes Labor gewesen wäre) ist schon leer.
Beispiel 3 hat wiederrum 2 Labor, also sieht seine ursprüngliche xls-File aus wie die auf dem jpeg.

Ich hoffe ich habs einigermaßen verständlich gemacht. Das Problem liegt jetzt eindeutig darin, eine Schleife (oder wie man so was nennt, bin beim Programmieren ein ganz ganz blutiger Anfänger) zu programmieren, die die schaut, wieviel Labors gemacht wurden (am Besten bis wohin in der ersten Zeile ein Datum steht!!!).
Dementsprechend bei 2 Labors (=Datum in E1 und F1) 2 neue Zeilen in die zusammenfassende neue Datei schreibt, bzw wie bei Beispiel2 (nur Datum in E1, F1 ist schon frei...) nur eine Zeile, da es nur 1 Labor gab.

Es sollen fast alle Werte rausgelesen werden, so an die 90 - 100 Stück (kann aber in mehreren Teilen erfolgen)!

Ja der Datenblock ist dann zu Ende, wenn in der letzten Zeile in Spalte A nichts mehr steht.

@Rafiki: Es soll nacher (wie hoffentlich oben beschrieben) eine einzige Tabelle werden. Es sollen dann auch noch andere Werte reingenommen werden.

Also nochmal vielen vielen Dank!!!!
Bitte warten ..
Mitglied: bastla
26.11.2008 um 23:33 Uhr
Hallo inhwue!

Versuch es einmal mit folgendem Entwurf:
Zu Testzwecken sind in Zeile 19 einige ID eingetragen, aber natürlich ist die Liste noch zu vervollständigen (wobei die einzelnen ID nicht durchgängig in Großbuchstaben geschrieben werden müssen - wird im Code berücksichtigt).

Bei jedem Durchlauf wird übrigens vorweg die Zieltabelle gelöscht (um eine Anpassung an eine ev zwischenzeitlich geänderte ID-Liste zu ermöglichen).

Zeilen der Quelltabelle mit ID, welche in der oben genannten Liste nicht vorkommen, werden (kommentarlos) übergangen (ließen sich über einen "Else"-Teil nach Zeile 50 noch anzeigen/dokumentieren).

Noch ein Hinweis auf Zeile 37: Hier wird festgelegt, in welcher Tabelle die Quelldaten gesucht werden sollen (die Angabe mit Tabellenname, also "Tabelle2", wäre die sicherere Variante). Zu überlegen wäre, ob es ein eindeutiges Kennzeichen für die "richtige" Tabelle gibt - dann könnten alle Tabellen nach dieser Kennung durchsucht werden, was die Sicherheit weiter erhöhen würde.

Grüße
bastla
Bitte warten ..
Mitglied: inhwue
01.12.2008 um 01:58 Uhr
Hallo bastla!

Hat alles wunderbar ohne jegliche Probleme geklappt ! Danke, hast mir viel Zeit, Umstände und Grübelei erspart.

Gruss,
inhwue
Bitte warten ..
Heiß diskutierte Inhalte
Benchmarks
M.2 SSD und RAM zu langsam
gelöst MarkowitschFrageBenchmarks22 Kommentare

Hallo zusammen, ich habe mir folgenden PC zusammengestellt : MB: ASUS - ROG Strix Z490-E Gaming Mainboard (90MB12P0-M0EAY0) CPU: ...

Datenbanken
SQL Null Abfrage
gelöst newit1FrageDatenbanken18 Kommentare

Hallo zusammen, ich versuche eine CSV in meine Datenbank zu importieren. Das klappt auch. Die CSV hat folgendes Format: ...

Router & Routing
OPNSense statt Endian Firewall
hannes.hutmacherFrageRouter & Routing14 Kommentare

Hallo zusammen, wir setzen hinter der pfSense, die die direkt am Internet hängt, noch eine Endian Firewall ein. Dazwischen ...

Peripheriegeräte
Suchen Outdoor Wandler von LWL auf Cat 7 Kabel
gelöst pavelruFragePeripheriegeräte13 Kommentare

Hallo Zusammen, wir suchen einen Outdoor Konverter welcher von einem kommenden LWL Kabel auf CAT 7 Lan Kabel weiter ...

Windows 10
Amazon-Werbung im MS Edge Chromium
emeriksFrageWindows 1012 Kommentare

Hi, habe hier ein Win10 Pro. Seit ca. 2-3 Wochen habe ich gelegentlich den Effekt, dass beim Suchen im ...

Router & Routing
VPN mit zweiter Fritzbox hinter einer 7590
Eagle69FrageRouter & Routing11 Kommentare

Hallo zusammen, ich habe folgendes Problem. Auf der einen Seite steht ein Router von Bintec, dass Model BI.IP+ (vergleichbar ...

Ähnliche Inhalte
Server-Hardware

APC 1500 Meldung "Batterwie Wechseln" nach Batteriewechsel

PizzaPepperoniFrageServer-Hardware11 Kommentare

Hallo.Habe gestern Abend die Batterie an der USV gewechselt, da im Display Batterie Wechseln stand und jene auch schon ...

Peripheriegeräte

APC Smart USV 1500 Lampe leuchtet rot

gelöst uridium69FragePeripheriegeräte12 Kommentare

Tag zusammen Habe heute bei der einen APC Smart USV 1500 (Tower, alte Version ohne LED Display) den Akku ...

Peripheriegeräte

APC BackupUPS Pro 1500 - Lüfter permanent an

Fr4nkiFragePeripheriegeräte2 Kommentare

Hallo Liebe Leute, ich habe eine APC Back UPS Pro 1200, an diese ist u.a. mein PC angeschlossen. In ...

Netzwerkgrundlagen

MTU 1500 trifft auf MTU 1900 bei FreeNAS und ESXi 6.5

ScampicfxFrageNetzwerkgrundlagen5 Kommentare

Hi zusammen, bei mir hat sich mal wieder eine kleine Frage ergeben Ich möchte schon mal vorab mich für ...

Microsoft Office

Suchen mit 2 Werten (x,y) in einer Tabell - Bereich.vergleich gibt nur Wahr oder Falsch aus

gelöst ArafatFrageMicrosoft Office2 Kommentare

Hallo Zusammen, ich suche in einem 2. Tabellenbatt nach über 2 Werte x und y nach einem 3. Wert. ...

Neue Fragen
Administrator Magazin
11 | 2020 Virtualisierung ist aus der IT nicht mehr wegzudenken. In der November-Ausgabe des IT-Administrator Magazins dreht sich der Schwerpunkt um das Thema "Server- und Storage-Virtualisierung". Darin erfahren Sie, wie sich die Virtualisierungstechnologie entwickelt hat, welche Varianten es im Bereich Server und Speicher gibt und wie ...
Neue Beiträge
Neue Jobangebote
Server- und Storage-VirtualisierungServer- und Storage-VirtualisierungBerechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid Cloud