Frage von FrageLars, 88

Wie kann ich bei der Excel-Funktion LINKS die Textformatierung mit übernehmen?

Ich habe eine Zelle mit Textinhalt, der zu Teilen durchgestrichen ist und zu anderen Teilen nicht. Diese Zelle soll auch an einer anderen Stelle in der Tabelle auftauchen. Bisher habe ich das über die LINKS-Funktion geöst. Hierbei wird aber die Durchstreichenlinie nicht mit übernommen, was für mich jedoch wichtig ist. Gibt es hier für Lösungen - wie sehen sie aus?

Lieben herzlichen Dank!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Britzcontrol, 26

Um Iamiam die Pfriemelei zu ersparen schrieb ich schnell mal, angeregt durch Ninombres Ansatz, ein Programmchen, in dem wahlweise die Worte durchgestrichen werden können.

Sub EinzelWortStreichen()
Dim start(10)
Z = 1
ja = True
nein = False
schtring = ActiveCell.Value
lang = Len(ActiveCell)
For i = 1 To lang 'Leerzeichen finden
islea = Mid(schtring, i, 1)
If islea = Chr(32) Then
start(Z) = i: Z = Z + 1 ' und merken
End If
Next i
wWort = InputBox("Welches Wort soll NICHT durchgestrichen sein (1, 2 oder 3)")
'definierter Zustand: alles NICHT durchgestrichen
With ActiveCell.Characters(start:=von, Length:=lank).Font
.Strikethrough = nein
End With
'erstes
If wWort = 1 Then
von = start(1): bis = lang: lank = lang - start(1) + 1
End If
'drittes
If wWort = 3 Then
von = 1: bis = start(2) + 1: lank = start(2) - 1
End If
'zweites
If wWort = 2 Then
With ActiveCell.Characters(start:=1, Length:=lank).Font
.Strikethrough = ja
End With
von = start(1): bis = start(2): lank = start(2) - start(1)
With ActiveCell.Characters(start:=von, Length:=lank).Font
.Strikethrough = nein
End With
Exit Sub
End If
'Ausführung erstes und drittes
With ActiveCell.Characters(start:=von, Length:=lank).Font
.Strikethrough = ja
End With
End Sub

Worte (max 3) werden in der aktiven Zelle gezählt, abgefragt wird, welches Wort (1., 2. oder 3.) durchgestrichen werden soll. Bei versehentlichem "streichen" kann das Makro erneut (mit dem richtigen Wort) ausgeführt werden. (Man beachte meine Wortwahl bei der Benennung der Variablen)

Vielleicht ist es ja nützlich.

Gruß aus Berlin

Kommentar von FrageLars ,

Hui!

Prima! Wo muss ich das einfügen? Ich habe keine Ahnung was ich damit tun muss, außer: es kopieren. Dann habe ich es in der Zwischenablage. Wie geht es weiter? Hast du vielleicht ein paar Stichworte, wonach ich googlen kann, um deine tolle Arbeit umzusetzten?

Kommentar von Britzcontrol ,

O je ...

- Tabellenblatt-Reiter - rechte Maustatste - "Code anzeigen"
- hierhin das Makro kopieren (Sub... bis ...EndSub)
- in Excel: Entwicklertools - Einfügen - Formularsteuerelemente -     Schaltfläche
- Rechteck aufziehen, auf das Makro "EinzelWortStreichen" klicken
- fertig

Jetzt müsste beim Klick auf den Button das Makro starten.

Gruß aus Berlin

Expertenantwort
von Iamiam, Community-Experte für Excel, 46

innerhalb einer Formel(-Zelle) lassen sich die Zeichen nicht einzeln formatieren (auch nicht mit einem Makro), nur als (Gesamt-)Zellformat.

Ist die Formel zu WERT umgesetzt, kann tatsächlich ein Makro helfen, aber Ninombre hat völlig recht, das lohnt nicht, denn Du bräuchtest für jeden Fall ein extra Makro.

Warum ist das so?: Weil bei Änderung eines Parameters sich der Zellinhalt ändert, die Formatierung aber an der Position der Zeichen im Text festgemacht ist (da wird bei Bedarf eine Zeichenliste -Cells(X).Text.Characters(1 bis n).Font.Color dürfte die in VBA heissen- angelegt (Zeichen1, Zeichen2, ...Zeichen n), die ja jedesmal umgeschrieben werden müsste!

Eine so aufwändige Programmierung hat xl nicht. (xl ist primitiver, als man glaubt, aber äusserst umfangreich!). Um Missverständnissen vorzubeugen: xl ist NICHT in VBA programmiert, sondern in einem BASIC-Dialekt (hab ich mir sagen lassen)

Kommentar von Iamiam ,

Du kannst nur -ebenfalls in Handarbeit, also in Zukunft, die jetzt durchgestrichenen Zeichen durch je ein zB ٠,∙, oder ¦ davor oder besser noch danach (aber besser nicht beides!) markieren. Da diese Zeichen nicht im normalen Zeichensatz vorhanden sind, kannst Du stattdessen zunächst ein seltenes Zeichen wie  #, µ oder | etc nehmen (das würde aber die Lesbarkeit vermutlich stark stören) und das dann per Suchen/Ersetzen (Strg+h, mindestens 2 Zellen markieren, sonst passiert das im ganzen Blatt!) durch das Zeichen Deiner Wahl substituieren. Als Zellinhalt wird das dann übernommen, allerdings kann sich dadurch die das Längenargument von links ändern - Einen Tod MUSS man sterben!

Kommentar von Iamiam ,

Deinem Kommentar zu Ninombre entnehme ich, dass es sinnvoll sein könnte, doch ein Makro im oben beschriebenen Sinne über die Teil-durchgestrichenen Zellen laufen zu lassen, das obige Zeichen einfügt.

Vllt ließe sich sogar die Fkt. links() automatisch anpassen (müsste man aber hinpfriemeln, das VBA-Makro sollte demgegenüber leichter sein).

Wenn das wirklich wichtig ist, melde Dich nochmal, nur so zur Übung wär das zu aufwändig!

Kommentar von DeeDee07 ,

innerhalb einer Formel(-Zelle) lassen sich die Zeichen nicht einzeln
formatieren (auch nicht mit einem Makro), nur als (Gesamt-)Zellformat.

Du kannst die Zeichen einer Zelle individuell formatieren, und zwar in der Bearbeitungszeile. Mit Kopieren, Inhalte einfügen, Alles (zumindest Formate) kann das Format auch übertragen werden, aber nicht über das normale Einfügen.

Eine automatisierte Lösung (Verknüpfung) wird wohl nur über ein Makro möglich sein.

Kommentar von Iamiam ,

ich hab das in Formeln noch nie hingekriegt, seit wann geht das?

Wenn ich schreibe ="AAA"&"BBB" und in der Bearbeitungszeile ein A markiere, dann ergraut die Zeichenfärbe-Option

und auch wenn ich ein A durch ein rot und durchgestrichen formatiertes Zeichen von woanders her kopiere, wird nur das unformatierte A eingefügt!

Kommentar von DeeDee07 ,

Ok, da habe ich dich missverstanden bzw. nicht genau gelesen. Ich meinte das manuelle Formatieren von Zelleninhalt ohne Formeln.

Kommentar von FrageLars ,

Ihr Lieben, ihr seid spitze!

Ich habe leider nicht alles verstanden, aber ich glaube das Wesentliche habe ich kapiert: Es ist ganz schön aufwendig und nicht ganz leicht. Da mir die Zeit wegrennt und mein Datenpool verhältnismäßig klein ist, bleibe ich zunächst bei meiner Variante "ich kopiere die Zellen einfach" und muss halt höllisch aufpassen, wenn ich etwas verändere, dass ich es dann überall verändere.

Meinem Projekt übergeordnet steht noch eins mit viel mehr Daten, hierfür kann das dan durchaus noch mal sinnvoll sein. Wenn das so weit ist, melde ich mich noch mal und evtl. habt ihr dann die Zeit und Motivation mir das noch mal für Excel-Anfänger wie mich zu übersetzen.

Vielen Lien Dank euch allen erstmal!

Expertenantwort
von Ninombre, Community-Experte für Excel, 46

Über Formeln ist mir keine Möglichkeit bekannt. Es geht mit VBA, ist aber fraglich, ob sich der Einsatz eines Makros lohnt.

Wenn es bestimmte Regeln gibt, warum die Quell-Zelle durchgestrichen ist, also über eine bedingte Formatierung könnte man das natürlich auch für das Ziel verwenden.

Kommentar von FrageLars ,

Danke für deine Antwort.

Was ist VBA?

Die Regel ist, dass es manchmal mehrere Wörter in einer Zelle gibt. Diese Zelle wurde dann ebnfalls mehrfach kopiert, und immer so durchgestrichen, dass man immer nur eins der Wörter nicht-durchgestrichen sieht. Die Trennung ist also immer bei einem Leerzeichen. Das war Handarbeit, ich habe keine Ahnung, wie man das Excel machen lassen kann.

Beispiel (fett markiert = durchgestrichen):

Ich danke dir

Ich danke dir

Ich danke dir

Kommentar von Ninombre ,

Das ist eine einfache Programmiersprache mit dem man Makros erstellen kann.

Willst Du mit =links eine Mischung aus durchgestrichen und nicht-durchgestrichen übernehmen oder immer nur ein Wort? Das wäre ein wichtiger Unterschied, d.h. wie Iamiam geschrieben hat, ob man die ganzen Zellinhalt formatiert oder auf einzelne Buchstaben muss.

Kommentar von FrageLars ,

Ich will eine Zelle übernehmen, die gemischt ist, also zum Teil durchgestrichene Inhalte und zum Teil nicht durchgestrichene Inhalte hat.

Nebenbei: Ich stuane über euer Fachwissen und die vielen Möglichkeiten, die es gibt. Danke. :)

Kommentar von Ninombre ,

Danke für die Lorbeeren, aber das ist ein etwas kniffliger Fall. Weiß gerade nicht, ob es eine gute Lösung dafür gibt.

Wenn man es fest in ein Makro schreibt, geht es ganz gut. Das ist aber fürs Handling nicht wirklich prickelnd. Du musst dann immer ein Makro starten, um die eine Zelle zu befüllen.

Sub streichmich()
Range("A1").Value = Left(Range("A2").Value, 10) 'anzahl zeichen die übernommen werden
For i = 1 To 10 'muss hier gleich sein wie in vorheriger Zeile
Range("A1").Characters(i, 1).Font.Strikethrough = Range("A2").Characters(i, 1).Font.Strikethrough
Next
End Sub

Man kann benutzerdefinitierte Funktionen erstellen, die man wie eine normale Formel aufruft. Solchen Funktionen kann man  Inputparameter mitgeben und kompliziertes Zeug ermitteln. Das Ergebnis wird dann in der Zelle angezeigt, also wie bei einer sonstigen Formel auch. Soweit so gut, mir fällt nur nichts ein, wie man aus einer solchen Function mehr tun kann, als nur einen Wert zurückliefern, denn Formatierungen der Schrift gehen so nicht.

Mühsamer Ansatz: Eine benutzerdefinierte Function, die quasi das gleiche macht, wie normale =links-Funktion. Dazu ein Makro, dass die gesamten benutzten Zellen prüft und wenn es eine Zelle mit der benutzerdefinierten Funktion findet, die durchgestrichene Schrift übernimmt.

Darüber muss ich morgen  nachdenken - vielleicht fällt einem der anderen Excelmenschen noch was ein.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten