Wir haben eine neue Brandmeldeanlage bekommen, die nach und nach die alte ersetzen soll. Informationen bekomme ich nur als PDF. Wenn ich den gesamten Inhalt dieser PDF in ein Excel-sheet kopiere bekomme ich eine recht unübersichtliche Liste, die ich dann irgendwie aufsplitten muss. Die Beispieldatei ist stark gekürzt. Im Original sind es bis jetzt knapp 10.000 Zeilen, und es wird im Laufe der nächsten paar Jahre auf das ca. 5-fache wachsen. Da mit Sicherheit noch Fragen auftauchen schreib ich jetzt erst mal nicht weiter. Wer Lust hat schaut einfach mal rein und hat hoffentlich Ideen wie man das umsetzen kann.
Hi Fen, Der Block 120 002 02 besagt Zentrale 120, Baugruppe 002, Ring 02. Die Zahl in der nächsten Zeile besagt an welcher Stelle im Ring sich das Element befindet. Fazit: zumindest die Struktur ### ### ## ist fix. Die Zahlen darin ändern sich. Klar, ging aus dem Beispiel nicht hervor. Danke schon mal. Igel
30.10.2020, 14:12 (Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2020, 14:12 von Fennek.)
Es war doch etwas komplizierter als auf den ersten Blick gedacht.
Hier ein Entwurf bei dem noch ein oder zwei If-Abfragen verrutscht sind:
Code:
public RegEx as Object
Type Igel EP As String Elem As Integer Melde As Integer EinzelM As String Text As String Besonder_1 As String Typ As String Besonder_2 As String Art As String Einstellung As String End Type
Sub Vorbereitung() ' <<<<< einmal ausführen >>>>>>> For i = 7 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) Like "### ### ##" Then Cells(i, 2) = 1 Else Cells(i, 2) = "a" End If Next i End Sub
Sub T_2() Dim Ar(20) As Igel '<<<<<<<<<< anpassen Dim rng As Range Set RegEx = CreateObject("vbscript.regexp") RegEx.Pattern = "[A-Z]{2,}\d{3,}"
For Each rng In Range("B7:B100").SpecialCells(xlCellTypeConstants, 2).Areas Ar(r).EP = rng.Cells(1).Offset(-1, -1) Ar(r).Elem = rng.Cells(1).Offset(, -1) gr = Group(rng.Cells(2).Offset(, -1)) Ar(r).Melde = gr(0) Ar(r).EinzelM = gr(1) Ar(r).Text = gr(2) Ar(r).Typ = gr(3) If Ar(r).Typ = "" Then Ar(r).Besonder_1 = rng.Cells(3).Offset(, -1) If Meldetyp(rng.Cells(4).Offset(, -1)) Then Ar(r).Typ = rng.Cells(4).Offset(, -1) Else Ar(r).Besonder_2 = rng.Cells(5).Offset(, -1) Ar(r).Art = rng.Cells(rng.Cells.Count).Offset(, 1) End If
If rng.Cells(rng.Cells.Count) = "Standard Plus" Then Ar(r).Einstellung = "Standard Plus" Else Ar(r).Art = rng.Cells(rng.Cells.Count).Offset(, -1) End If
das seit Excel 2016 immer vorhandene Power Query, kann seit diesem Jhar in der O365-Version auch direkt PDF-Dokumente importieren. Die, deiner Mappe entnehmbaren, Transformationsregeln, sollten sich mit Power Query recht einfach umsetzten lassen. Mittels des MS-Tools Flow, das wohl Unternehmenskunden von O365 immer kostenlos zur Verfügung steht, könntest du eingehende Mail-Anhänge direkt in einen bestimmten Order ablegen. Mit Power Query könntest du dann von diesem Ordern immer alle, nur bestimmte, nur die neuesten, automatisiert importieren.
VG, wisch Wer Hilfe nimmt, sollte auch Hilfe geben! Auch wenn dies auf einem ganz anderem Gebiet geschieht.
Jetzt hab ich doch nochmal schnell reingeschaut. #Fen, erst mal danke für die Mühe. Leider musste ich feststellen, dass unsere EDV neuerdings Download von xl.. blockt. Muss ich Montag klären. #Wisch, mit PQ hab ich noch überhaupt keine Erfahrung. Wir haben auf der Arbeit Excel 2013.
Wie dem auch sei, ist erst mal Wochenende. Bleibt gesund. Bis Montag
Private Type Igel EP As String Elem As Integer Melde As Integer EinzelM As String Text As String Besonder_1 As String Typ As String Besonder_2 As String Art As String Einstellung As String End Type
Sub Vorbereitung() For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) Like "### ### ##" Then Cells(i, 2) = 1 Else Cells(i, 2) = "a" End If Next i End Sub
Sub F_en() Dim Ar() As Igel Dim rng As Range Set RegEx = CreateObject("vbscript.regexp") RegEx.Pattern = "[A-Z]{2,}\d{3,}"
For Each rng In Columns(2).SpecialCells(xlCellTypeConstants, 2).Areas r = r + 1 Ar(r).EP = rng.Cells(1).Offset(-1, -1) Ar(r).Elem = rng.Cells(1).Offset(, -1) gr = Group(rng.Cells(2).Offset(, -1)) Ar(r).Melde = gr(0) Ar(r).EinzelM = gr(1) Ar(r).Text = gr(2) Ar(r).Typ = gr(3) If Ar(r).Typ = "" Then Ar(r).Besonder_1 = rng.Cells(3).Offset(, -1) If Meldetyp(rng.Cells(4).Offset(, -1)) Then Ar(r).Typ = rng.Cells(4).Offset(, -1) End If
If rng.Cells(rng.Cells.Count).Offset(, -1) = "Standard Plus" Then Ar(r).Einstellung = "Standard Plus" Ar(r).Art = rng.Cells(rng.Cells.Count - 1).Offset(, -1) Else Ar(r).Art = rng.Cells(rng.Cells.Count).Offset(, -1) End If
If Meldetyp(rng.Cells(2).Offset(, -1)) And rng.Cells(3).Offset(, -1) <> Ar(r).Art Then _ Ar(r).Besonder_2 = rng.Cells(3).Offset(, -1) Next rng