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, 13:12 (Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2020, 13: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