Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmtes Element aus mehrdimensionalen Array auslesen

Forumthread: Bestimmtes Element aus mehrdimensionalen Array auslesen

Bestimmtes Element aus mehrdimensionalen Array auslesen
12.07.2020 11:32:33
Hermann
Liebe Freunde!
Ich bitte euch um Hilfe mit einem Macro, welches Excelcellen formatieren soll! Die Zellen enthalten HTML formatieren Text der in einen nativen Exceltext umgewandelt werden soll. Da die Tabelle relativ umfangreich ist wurden die Daten in ein Array gestellt! Die Umwandlung des Zeilenumbruchs ([BR]) und der Listenelemente [LI] konnten breits gelöst werden. Nur die Bold Textstellen verursachen Probleme! Wenn ein Text mit Bold formatiert wurde (Charakter.font.bold) und die nächste Textstelle aufgerufen wird, die zu zuvor geänderte Textstelle wieder auf normal gestellt.
Jetzt habe ich mir gedacht ich könnte die Anfangs- und Endposition zusammen mit dem Text in einem mehrdimensionalen Array speicher und erst ganz am Schluß die Textstellen mit Bold formatieren. Leider reichen meine VBA Kenntnisse dazu nicht ganz aus um dieses Macro zu schreiben und das Problem lösen zu können!
Bitte entschuldigt die Formatierung aber ich musste im PGM Code die HTML Tags "verstümmeln" damit der Text lesbar bleibt!!
Hier der Code zu meinem Problem:
Sub HTMLRetour()
Dim TextArr() As Variant
Dim TextArr2() As Variant
Dim BoldArr(0 To 9, 0 To 1) As Integer
Dim AnzZeile As Long
Dim PositionStart As Integer
Dim PositionEnde As Integer
Dim b, e, i, j As Integer
Dim StrLaenge As Integer
'Anzahl Elemente in Exceltabelle für dyn. Array ermitteln
For i = 3 To 50000
If Cells(i, 3).Value = "" Then
Exit For
End If
Next
'3 dim. Array in der größe der Datentabelle erstellen - 3 = letzte leere Zeile + 2 Headerzeilen
'Text + Bold vorkommen (max. 10x)
ReDim TextArr(i - 3, 0 To 9, 0 To 1)
e = i - 1 ' Anzahl Elemente in Exceltabelle
'Array mit Daten befüllen --> mit 0 beginnend
For i = LBound(TextArr) To UBound(TextArr)
TextArr(i, 0, 0) = Cells(i + 3, 3).Value
Next
'Verarbeitung des Array mit Formatierungen
For i = LBound(TextArr) To UBound(TextArr)
PositionStart = 1
' HTML Codes für Sonderzeichen wieder zurücksetzen
TextArr(i, 0, 0) = Replace(TextArr(i, 0, 0), "[LI]", "• ")
TextArr(i, 0, 0) = Replace(TextArr(i, 0, 0), "[/u]", "")
' Zeilenumbruch innerhalb der Zelle - nach allen Formatierungen damit keine
' Positionsverschiebungen durch vbCrLF passieren
For j = 1 To 30
PositionStart = InStr(1, TextArr(i, 0, 0), "[BR]", 1)
If PositionStart  0 Then
AnzZeile = AnzZeile + 1
'String mit vblf ( Chr(10) ) und entfernten [BR] Tag
TextArr(i, 0, 0) = Left(TextArr(i, 0, 0), PositionStart - 1) & Chr(10) & Mid(TextArr(i, _
0, 0), PositionStart + 4, 2000)
Else
'Schleife verlassen - [BR] kommt nicht mehr vor
If PositionStart = 0 Then
Exit For
End If
End If
Next
'Arraydaten für Bold Zeichen erstellen (max. 10 Vorkommen)
b = 0
For j = 1 To 10
PositionStart = InStr(1, TextArr(i, 0, 0), "[B]", 1)
If PositionStart  0 Then
PositionEnde = InStr(1, TextArr(i, 0, 0), "[/B]", 1)
End If
If PositionStart  0 And PositionEnde  0 Then
'Endtag zuerst entfernen damit sich Startposition nicht ändert
TextArr(i, 0, 0) = Left(TextArr(i, 0, 0), PositionEnde - 1) & Mid(TextArr(i, 0, 0),  _
PositionEnde + 4, 2000)
TextArr(i, 0, 0) = Left(TextArr(i, 0, 0), PositionStart - 1) & Mid(TextArr(i, 0, 0),  _
PositionStart + 3, 2000)
TextArr(i, b, 0) = PositionStart
TextArr(i, b, 1) = PositionEnde
b = b + 1
Else
Exit For
End If
Next
Next
' Formatierung BOLD Texte
For i = LBound(TextArr) To UBound(TextArr)
Cells(i + 3, 3).value = textArr(i, 0, 0)
For b = LBound(BoldArr) To UBound(BoldArr)
PositionStart = TextArr(i, b, 0)
PositionEnde = TextArr(i, b, 1)
Cells(i, 3).Characters(PositionStart, PositionEnde - PositionStart - 3).Font.Bold =  _
True
Next
Next
End Sub
Schön wäre es wenn ich sagen könnte: formatiere mir den Text i aus dem Array TextArr mit dem Bold vorkommen (StartPosition, EndPosition) mit Bold (For - Next mit 10 Schleifendurchläufen) und schreibe diesen Text in Zelle(i + 3, 3)!!!
Ich hoffe, ich konnte ungefähr vermitteln was ich gerne mit dem Macro bewerkstelligen möchte.
Vielleicht gibt es ja auch eine komplett einfache Möglichkeit dies zu bewerkstelligen!
Hier noch ein Mustertext der "Excelkonform" umgewandelt werden sollte! Die Tabelle hat ca. 18.000 Zeilen!
§52/7a Fahrverbot für Lastkraftfahrzeuge mit[BR]Gewichtsangabe 960/2,5mm Typ 3[BR][BR][B]Flache Verkehrszeichen:[/B][BR]Alu-Speziallegierung - Stärke 2 mm, 2,5 mm oder 3 mm.[BR][BR][B]Befestigungsart:[/B][BR]In Rohrrahmen oder mit KC-Laschen auf Rohrsteher.[BR][BR]Die Befestigung von folienbelegten Schildern, insbesondere von Folie Typ 1, 2 und 3 ist grundsätzlich ohne Durchbohren der Folie vorzunehmen![BR][BR][B]RA3-Aufbau C (Folie Typ 3) - Folienaufbau Prismatisch[/B][BR]Microprismentechnik der Bauart RA3 bietet höchste Rückstrahlwerte. Besonders geeignet für den Einsatz von Überkopf- und Seitenbeschilderung.[BR]Haltbarkeit 12 Jahre[BR][BR][B]Allgemein[/B][BR]Alle Verkehrszeichen und -tafeln entsprechen hinsichtlich Größe, Form, Farbe, Symbolen, Beschriftung, Rückstrahlwerten, Materialien und Verarbeitung den jeweiligen geltenden gesetzlichen Bestimmungen der StVO und Straßenverkehrszeichenverordnung sowie den einschlägigen Normen, Vorschriften und Richtlinien in der jeweils geltenden Fassung. Die Ecken sind abgerundet und die Vorderseite ist mit Folie belegt. Die Rückseite ist Alu natur und blendfrei. Die Kennzeichnung erfolgt entsprechend den jeweils gültigen Normen, Vorschriften und Richtlinien.[BR]
Vielen Dank im Voraus
Hermann
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmtes Element aus mehrdimensionalen Array auslesen
12.07.2020 14:16:02
fcs
Hallo Herman,
mit einigen Anpassungen im Code sollte es funktionieren und dies schneller.
Die Texte und die Information der Positionen zu den fett formatierzen Textteilen muss in 2 Arrays verwaltet werden. Nur das Bold-Array muss hier 3D sein.
Die Daten in Spalte C (3) werden direkt in ein Array geladen, nicht zelle für Zelle.
Bei der End-Position der Fett formatieretn Textteile ist eine Korrektur erforderlich, die Länge des HTML-Bold-Tag muss abgezogen werden.
Beim Formatieren des Textes in den Zellen muss du eine Prüfung einbauen, ob im Bold-Array der Positionswert &gt0 ist, da es sonst zu einem Fehler kommt.
Ich hab mit deinem Beispieltext getestet, es schein zu funktionieren.
Bei 18000 Datenzeilen wird es etwas dauern, denn die Formatierung in den Zellen braucht ein wenig Zeit
Noch ein Hinweis, wenn die Anzahl der Zeilen im Text noch etwas größer ist, dann wird überzähliger Text in den Excel-Zellen nicht mehr dargestellt. Die Höhe einer ExcelZelle ist begrenzt.
LG
Franz
Textdatei mit angepasstem Code
https://www.herber.de/bbs/user/138997.txt
Anzeige
AW: Bestimmtes Element aus mehrdimensionalen Array auslesen
12.07.2020 17:33:09
Hermann
Hallo Franz!
Vielen Dank für deine Unterstützung! Ich werde Morgen deine Vorschläge ausprobieren und das Ergebnis hier im Forum posten!
Wünsche Dir noch ein schönes Wochenende!
Hermann
AW: Bestimmtes Element aus mehrdimensionalen Array auslesen
13.07.2020 14:43:49
Hermann
Hallo Franz!
Ich kann dir nicht genug danken! Dein VBA Script hat wunderbar funktioniert! Ich muss mir die ARRAYs in VBA beizeiten besser anschauen, da diese offensichtlich sehr mächtige Funktionen, vor allem in Bezug auf Geschwindigkeit sind.
Danke
Hermann
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige