2013-02-28 27 views
5

Ich habe eine Zeichenfolge mithilfe einer Formel in Excel erstellt. als BeispielFormatieren einer Untergruppe von Text in Excel-Zelle mit Formel

Zelle C3 enthält Text "Sprachen"
Zelle C4 = "Englisch, Spanisch, Deutsch, Französisch"
Meine Forumla = C3 & ":" & CHAR (10) & C4

der gewünschte Text sei:

Sprachen:
Englisch, Spanisch, Deutsch, Französisch

(wo der fett gedruckten Text tatsächlich etwas Farbe wie rot wäre)

Gibt es eine Möglichkeit, dies in Excel zu tun (Teiltextformatierung ändern).

Ich habe versucht, eine Formel ... (Problem)

Function formatText(InText As Range) 

'Set font color 
    InText.Characters(1.5).Font.Color = Red 
    'InText.Characters((InStr(1, ":", InText) + 1), (Len(InText) - InStr(1, ":", InText))).Font.ColorIndex = 3 
End Function 
+1

+1 interessantes Problem/Fehlbetrag der Anwendung – whytheq

Antwort

4

Ihre geschrieben Funktion mit der Arbeit , wenn und nur wenn

  • es von einem Sub genannt wird (dh wie andere erwähnt haben, nicht als UDF)

Und

  • Die Werte im Bereich InText sind String-Konstanten. (Dies ist der Hauptpunkt meiner Antwort)

Es nicht für alle Zellen in Bereich arbeiten InText eine Formel enthält. AFAIK Sie können Teil eines von einer Formel zurückgegebenen Strings nicht formatieren.

BTW Ich würde gerne daran falsch bewiesen werden!

+0

+1! Ich würde gerne beweisen, dass du falsch liegst, aber es funktioniert nur, wenn du vorher die Formel auf einen Wert änderst. Andernfalls wird die Farbe auf alle Zellen angewendet. :-( –

+0

Ja .. Ich verstehe, was Sie sagen ... also, wie würden Sie eine Formelausgabe in eine Zeichenfolge umwandeln, so dass Sie die Textformatierung anwenden können? – Hightower

0

Sie können die folgenden UDF in Excel-Schnittstelle nicht direkt aufrufen. Dazu müssen Sie ein Ereignis verwenden, da UDF die physikalischen Eigenschaften einer Zelle nicht ändern kann. Für weitere Details können Sie diesen Link lesen. http://support.microsoft.com/kb/170787

Function formatText(InText As Range) 

'Set font color 
    InText.Interior.Color = vbRed 
    'InText.Characters((InStr(1, ":", InText) + 1), (Len(InText) - InStr(1, ":", InText))).Font.ColorIndex = 3 
End Function 
0

Sie müssen diesen Code verwenden:

InText.Characters(1,5).Font.Color = RGB(255, 0, 0) 

Wenn Sie es flexibel machen wollen, so dass nur die (vollständig) zweite Zeile rot ist, diesen Code verwenden:

InText.Characters(Instr(InText, vbCr)+1, Len(InText)-Instr(InText, vbCr)).Font.Color = RGB(255, 0, 0) 

Beachten Sie, dass Ihre Funktion von VBA aufgerufen werden muss, dh Sie können sie nicht als benutzerdefinierte Funktion verwenden! UDFs können nur ein Ergebnis zurückgeben, aber niemals eine Zelle ändern!

1

In Bezug auf Hightower Frage "Wie würden Sie eine Formelausgabe in eine Zeichenfolge umwandeln, so dass Sie die Textformatierung anwenden können?"

Um die Ausgabe einer Formel so zu "übertragen", dass Sie Textformatierung anwenden können, müssen Sie den von der Formel zurückgegebenen Wert in die Tabelle schreiben und dann die Formatierung auf den von Ihnen geschriebenen Wert anwenden. Sie können den Wert entweder in die Zelle schreiben, die die Formel enthält (wodurch die Formel gelöscht wird), oder Sie können den Wert an einer anderen Stelle in der Tabelle schreiben (wodurch die Formel erhalten bleibt, aber dann doppelt angezeigt wird).

Sub Cell_Format(InText as Range) 
    InText.formula = cstr(InText.value) ' converts result of formula into a string literal 
    'or: InText.offset(0,1).formula = cstr(InText.value) -- writes the value in the cell next to InText 
    InText.characters(1, 5).font.color = vbRed 
End Sub 

Dann Cell_Format range("$A$1") wird die Formel in Zelle $ A $ 1 mit einem String-Konstante und ändern die Farbe der ersten fünf Zeichen auf Rot ersetzen.

Wenn Sie dies für einen Bereich größer als eine Zelle tun wollen, fügen Sie diesen Code zum oben Erwähnten:

Sub Range_Format(InText as Range) 
    For each c in InText 
    Cell_Format(c) 
    Next 
End Sub 
Verwandte Themen