Excel Zellen zusammenfügen und formatieren
Hallo,
ich habe folgendes vor und habe mich gefragt ob ich das einfach mit Excel hinbekommen kann, und wenn ja, wie? Smile
Ich habe die angehängte Tablle (Auszug) mit einigen Spalten, diese Spalten haben Überschriften. Nicht in jeder Zeile ist in jeder Spalte etwas eingetragen.
Das Ziel ist es alle Spalten einer Zeile in einer Zelle zu verknüpfen, also so etwas wie Text A1 + B1 + C1, diesen dabei aber zu formatieren, also mit html Tags zu versehen. Diese Tags sollen abhängig von der Überschriften Spalte sein.
Also z.B für A1: A1<br> + B1 <br> .... der htmlcode soll natürlich nicht erscheinen, wenn C1 z.b. leer ist. Welcher Code eingefügt werden soll hängt von der Überschirft der Zeile ab, beinhaltet diese z.B. "Def" solles ein <b> sein, beinhaltet dieses ein Example soll am Ende ein <br> und am Anfang ein - erscheinen.
Ich hoffe ich habe mich halbwegs verständlich ausgedrückt ;) Ich habe zur Verdeutlichung noch eine Bsp. Tabelle angehängt.
Leider habe ich mit VBA keine Erfahrung, daher meine Frage.. geht das? und ist es ihne Vorkenntnisse relativ einfach zu bewerkstelligen? ;)
http://www.dehein.de/files/Bsp.xls
Vielen Dank
Dennis
ich habe folgendes vor und habe mich gefragt ob ich das einfach mit Excel hinbekommen kann, und wenn ja, wie? Smile
Ich habe die angehängte Tablle (Auszug) mit einigen Spalten, diese Spalten haben Überschriften. Nicht in jeder Zeile ist in jeder Spalte etwas eingetragen.
Das Ziel ist es alle Spalten einer Zeile in einer Zelle zu verknüpfen, also so etwas wie Text A1 + B1 + C1, diesen dabei aber zu formatieren, also mit html Tags zu versehen. Diese Tags sollen abhängig von der Überschriften Spalte sein.
Also z.B für A1: A1<br> + B1 <br> .... der htmlcode soll natürlich nicht erscheinen, wenn C1 z.b. leer ist. Welcher Code eingefügt werden soll hängt von der Überschirft der Zeile ab, beinhaltet diese z.B. "Def" solles ein <b> sein, beinhaltet dieses ein Example soll am Ende ein <br> und am Anfang ein - erscheinen.
Ich hoffe ich habe mich halbwegs verständlich ausgedrückt ;) Ich habe zur Verdeutlichung noch eine Bsp. Tabelle angehängt.
Leider habe ich mit VBA keine Erfahrung, daher meine Frage.. geht das? und ist es ihne Vorkenntnisse relativ einfach zu bewerkstelligen? ;)
http://www.dehein.de/files/Bsp.xls
Vielen Dank
Dennis
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188429
Url: https://administrator.de/forum/excel-zellen-zusammenfuegen-und-formatieren-188429.html
Ausgedruckt am: 02.02.2025 um 14:02 Uhr
6 Kommentare
Neuester Kommentar
Hallo dehein2!
Was noch nicht klar aus Deiner Beschreibung hervorgeht: Soll es für jede nicht leere Zelle einen "
Schließlich: Wohin soll der entstehende String geschrieben werden?
Wie sähe denn zB für eine Zeile Deiner Beispieldatei das Ergebnis aus?
Unabhängig von den fehlenden Details könnte das schematisch etwa so aussehen:
Grüße
bastla
Was noch nicht klar aus Deiner Beschreibung hervorgeht: Soll es für jede nicht leere Zelle einen "
<br>
"-Tag geben, und was ist bei Spalten, in deren Überschrift sowohl "Def" als auch "Example" enthalten sind, gewünscht?Schließlich: Wohin soll der entstehende String geschrieben werden?
Wie sähe denn zB für eine Zeile Deiner Beispieldatei das Ergebnis aus?
Unabhängig von den fehlenden Details könnte das schematisch etwa so aussehen:
Sub MakeHTML()
UeberZeile = 1 'Zeile mit Überschriften
UeberAbSpalte = 1 '= A; Spalte mit erster Überschrift
Dim Pre, Post
UeberSpalteMax = Cells(UeberZeile, UeberAbSpalte).End(xlToRight).Column
ReDim Pre(UeberSpalteMax), Post(UeberSpalteMax)
For Spalte = UeberAbSpalte To UeberSpalteMax
Post(Spalte) = "<br>" 'nach jedem nicht leeren Wert
If InStr(Cells(UeberZeile, Spalte).Value, "Example") > 0 Then 'wenn Überschrift "Example" enthält
Pre(Spalte) = "- " 'vor dem Wert einzufügen
Post(Spalte) = Post(Spalte) & "<br>" 'nach dem Wert zusätzlich einzufügen
End If
If Cells(UeberZeile, Spalte).Value Like "Def*" Then 'wenn Überschrift mit "Def" beginnt
Pre(Spalte) = "<b>" 'vor dem Wert einzufügen
Post(Spalte) = "</b>" & Post(Spalte) 'nach dem Wert einzufügen
End If
Next
Zeile = UeberZeile + 1
HTML = ""
Do While Cells(Zeile, UeberAbSpalte).Value <> 0 'alle Zeilen bearbeiten, in denen in der ersten Spalte ein Wert steht
For Spalte = UeberAbSpalte To UeberSpalteMax
Inhalt = Cells(Zeile, Spalte).Value
If Inhalt <> "" Then HTML = HTML & Pre(Spalte) & Inhalt & Post(Spalte) 'HTML-Code um Wert + Präfix + Postfix ergänzen
Next
HTML = HTML & "<br><br>" 'am Ende jeder Zeile hinzufügen
Cells(Zeile, Spalte).Value = HTML 'HTML-Code in die erste Spalte, die keine Überschrift hat, eintragen
Zeile = Zeile + 1
Loop
End Sub
bastla
Hallo dehein2!
Angepasst sähe das dann so aus:
wobei die Stuktur der Tabelle noch nicht optimal ist - der obige Code setzt daher voraus, dass die Spaltenreihenfolge
"Type" - "Url" - "Vocab" - Rest wie bisher
lautet.
Grüße
bastla
Angepasst sähe das dann so aus:
Sub MakeHTML()
UeberZeile = 1 'Zeile mit Überschriften
UeberAbSpalte = 1 '= A; Spalte mit erster Überschrift
Dim Pre, Post
UeberSpalteMax = Cells(UeberZeile, UeberAbSpalte).End(xlToRight).Column
ReDim Pre(UeberSpalteMax), Post(UeberSpalteMax)
For Spalte = UeberAbSpalte To UeberSpalteMax
UeberText = Cells(UeberZeile, Spalte).Value
Select Case UeberText 'für alle Fälle, in denen die Überschrift genau angegeben werden kann
Case "Type"
Post(Spalte) = "<br>"
Case "Url"
Pre(Spalte) = "<a href="""
Post(Spalte) = """>"
Case "Vocab"
Post(Spalte) = "</a>"
End Select
If UeberText Like "Def*" Then 'wenn Überschrift mit "Def" beginnt
Pre(Spalte) = "<p> <b>- " 'vor dem Wert einzufügen
Post(Spalte) = "</b> <br>" & Post(Spalte) 'nach dem Wert einzufügen
End If
If UeberText Like "*Example*" Then 'wenn Überschrift "Example" enthält
Pre(Spalte) = "--" 'vor dem Wert einzufügen
Post(Spalte) = Post(Spalte) & "<br>" 'nach dem Wert einzufügen
End If
Next
Zeile = UeberZeile + 1
Do While Cells(Zeile, UeberAbSpalte).Value <> 0 'alle Zeilen bearbeiten, in denen in der ersten Spalte ein Wert steht
HTML = "<b>" & Cells(Zeile, UeberAbSpalte + 2).Value & "</b> - " 'jede Zeile mit diesem Code beginnen
For Spalte = UeberAbSpalte To UeberSpalteMax 'alle Spalten der Reihe nach durchgehen
Inhalt = Cells(Zeile, Spalte).Value
If Inhalt <> "" Then HTML = HTML & Pre(Spalte) & Inhalt & Post(Spalte) 'HTML-Code um Wert + Präfix + Postfix ergänzen
Next
HTML = HTML & "<br><br>" 'am Ende jeder Zeile hinzufügen
Cells(Zeile, Spalte).Value = HTML 'HTML-Code in die erste Spalte, die keine Überschrift hat, eintragen
Zeile = Zeile + 1
Loop
End Sub
"Type" - "Url" - "Vocab" - Rest wie bisher
lautet.
Grüße
bastla
Hallo dehein2!
Grundsätzlich wird in den Zeilen 11 bis 29 für jede Spalte ermittelt, ob vor oder nach dem Wert dieser Spalte noch ein Eintrag erfolgen muss (stehen dann in
Hinsichtlich der einzufüenden Tags / Zeichen ist eigentlich nur eine Besonderheit zu beachten: Enthält der String ein Anführungszeichen, so muss dieses verdoppelt werden (siehe Zeilen 15 und 16).
Bei der Zuweisung kann entweder die Schreibweise
verwendet werden, um nur diesen Eintrag für diese Spalte zu verwenden, oder
um zusätzlich zu einem schon vorher gesetzten "Nachspann" noch mehr anzufügen (falls eine Spalte in mehrere Kategorien fallen könnte, was nach derzeitigem Stand aber eher nicht zutreffen solle - ich hab's aber mal für die "Example"-Spalten so eingetragen).
Die Zeilen 34 und 41 definieren jeweils Beginn und Ende der HTML-Zeile - so wird in Zeile 34 zunächst schon mal der Wert aus der dritten Datenspalte (
Grüße
bastla
wie würde ich jetzt weitere Spalten einbauen?
Einfach hinzufügen - es werden alle zusammenhängenden Spalten, für die es eine Überschrift in der in Zeile 2 des Codes festgelegten Überschriftenzeile gibt, verarbeitet ...leider verstehe ich es auf den ersten Blick noch nicht komplett ;)
Riskiere einfach noch ein paar weitere Blicke ... Grundsätzlich wird in den Zeilen 11 bis 29 für jede Spalte ermittelt, ob vor oder nach dem Wert dieser Spalte noch ein Eintrag erfolgen muss (stehen dann in
Pre()
und Post()
) - in den ersten Fällen ("Type", "Url", "Vocab") wird exakt mit der Spaltenüberschrift verglichen und bei Übereinstimmung jeweils der "Vorspann" und "Nachspann" festgelegt; die Zeilen 21 - 24 stehen für die Variante "Beginn der Überschrift prüfen" und 26 - 29 (habe ich noch etwas leichter nachvollziehbar geschrieben) sind ein Beispiel für die Fragestellung "Enthält die Überschrift den Suchbegriff?").Hinsichtlich der einzufüenden Tags / Zeichen ist eigentlich nur eine Besonderheit zu beachten: Enthält der String ein Anführungszeichen, so muss dieses verdoppelt werden (siehe Zeilen 15 und 16).
Bei der Zuweisung kann entweder die Schreibweise
Post(Spalte) = ...
Post(Spalte) = Post(Spalte) & ...
Die Zeilen 34 und 41 definieren jeweils Beginn und Ende der HTML-Zeile - so wird in Zeile 34 zunächst schon mal der Wert aus der dritten Datenspalte (
UeberAbSpalte + 2
) mit der entsprechenden Formatierung an den Anfang der Zeile gestellt und in Zeile 41 an das Ende der Zeile noch "<br><br>
" geschrieben.Grüße
bastla