Bestimmte buchstaben in einer Zelle suchen und Kursiv schreiben

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VBA.Neuling.

    Bestimmte buchstaben in einer Zelle suchen und Kursiv schreiben

    Guten Abend zusammen,

    ich habe da mal ne frage, ich weiß dass man mit:

    .Format.TextFrame2.TextRange.Characters(8, 1).Font.Italic = msoTrue

    einen bestimmten Buchstaben in einer Zelle ansteuern und kursiv schreiben kann. Hier muss man dann aber die genaue Position dieses Buchstabens kennen.

    Da sich bei mir aber die Position des Buchstabens Variieren kann, interesiert es mich, dass z.B. alle "T" und "K" kursiv geschrieben werden (unabhängig von der jeweiligen Position).

    Danke schonmal im vorraus
    Gruß
    Du könntest im Change-Event der Zelle die Positionen der T und K rausfinden und die Zelle entsprechend neu formatieren.
    Besonders effizient ist das aber nicht.

    Was du eigentlich willst:
    Du kannst dir einen eigenen Font definieren, bei dem die fraglichen Zeichen kursiv sind.
    Schönheitsfehler daran: Du kannst in Excel eine Schrift nicht ins Dokument einbetten. Sie muss im System installiert sein.
    Die Variante ist also nicht auf Rechner übertragbar, die deinen Font nicht installiert haben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Willst du die nur in einzelnen Zellen oder in der ganzen Arbeitsmappe die bestimten buchstaben Kursiv schreiben?

    habs jetzt mal für eine Zelle geschrieben und ausprogiert! bei mir klappts!

    Visual Basic-Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. Dim i As Integer
    3. Dim x As String
    4. x = Cells(1, 1).Text
    5. For i = 1 To Len(x)
    6. If Mid(x, i, 1) = "k" Or Mid(x, i, 1) = "t" Then
    7. Sheets("Tabelle1").Cells(1, 1).Characters(i, 1).Font.Italic = msoTrue
    8. Else
    9. Sheets("Tabelle1").Cells(1, 1).Characters(i, 1).Font.Italic = msoFalse
    10. End If
    11. Next i
    12. End Sub



    So klapts für alle Zellen in allen Tabellen!
    Im Modul:

    Visual Basic-Quellcode

    1. Global AlteZelle As String
    2. Global AlteTabelle As String


    Im Workbook:

    Visual Basic-Quellcode

    1. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    2. Dim i As Integer
    3. Dim x As String
    4. If AlteZelle <> "" Then
    5. x = Sheets(AlteTabelle).Range(AlteZelle).Text
    6. For i = 1 To Len(x)
    7. If Mid(x, i, 1) = "k" Or Mid(x, i, 1) = "t" Then
    8. Sheets(AlteTabelle).Range(AlteZelle).Characters(i, 1).Font.Italic = msoTrue
    9. Else
    10. Sheets(AlteTabelle).Range(AlteZelle).Characters(i, 1).Font.Italic = msoFalse
    11. End If
    12. Next i
    13. End If
    14. AlteZelle = ActiveCell.Address
    15. AlteTabelle = ActiveSheet.Name
    16. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-manne-“ ()

    Danke euch beiden für die schnelle Antwort und sorry, dass ich es nicht schon vorher so genau ausgedrückt habe.

    Um genau zu sein, handelt es sich hierbei um die Überschrift eines Diagramms. Diese Überschrift besteht aus einem festen "Teil" und einen Variablen "Teil", wobei sich der Variable Teil an einer Eingabe die vom User gemacht wird orientiert.

    Da ich nicht vorher wissen kann, ob der User eine 2stellige oder 3stellige Zahl eingibt, kann ich im Vorfeld keine genau Position definieren.

    So sieht der Teil des Quellcodes bisher bisher aus:

    H = Sheets("Tabelle1").Cells(3, 1).Value
    M = Sheets("Tabelle1").Cells(3, 2).Value
    X = Sheets("Tabelle1").Cells(3, 3).Value

    ActiveChart..ChartTitle.Text = "T = " & H & " K (" & M & " K - " & X & " K)"



    Und im Diagramm wird dann dargestellt : T = 350 K (300 K - 400 K)

    Nun möchte ich "T" und "K" kursiv haben.
    Bin am überlegen ob ich die Buchstaben "T" und "K" nicht auch aus einer Zelle beziehen lasse, an der die Stelle des Buchstaben konstant ist,
    dann müsste ich nur noch mit :



    ActiveChart.Axes(xlCategory).AxisTitle.Format.TextFrame2.TextRange.Characters(8, 1).Font.Italic = msoTrue



    Darauf verweisen.

    Meint ihr, dass ich das vieleicht besser anders machen sollte ?
    Seht ihr vieleicht einen besseren Weg, jetzt wo ich genauer darauf eingegangen bin ?

    Danke schonmal im Vorraus.
    Gruß
    Ich würd's auf keinen Fall im SelectionChange-Ereignis machen, sondern im Change-Ereignis, sonst wird das fürchterlich unperformant!

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. x = Target.Value
    3. For i = 1 To Len(x)
    4. c=Mid(x, i, 1)
    5. Target.Characters(i, 1).Font.Italic = (c="K" Or c="T")
    6. Next i
    7. End Sub

    Edit:
    Ach so - ChartTitle

    Visual Basic-Quellcode

    1. Set TxtRng = ActiveChart.Axes(xlCategory).AxisTitle.Format.TextFrame2.TextRange
    2. For i = 1 To Len(TxtRng.Text)
    3. c=Mid(TxtRng.Text, i, 1)
    4. TxtRng.Characters(i, 1).Font.Italic = (c="K" Or c="T")
    5. Next i
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „petaod“ ()

    So sollte es klappen:

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. Dim i As Integer
    3. Dim x As String
    4. Tabelle1.ChartObjects(1).Chart.HasTitle = True
    5. Tabelle1.ChartObjects(1).Chart.ChartTitle.Text = "T = " & Sheets("Tabelle1").Cells(3, 1).Value & _
    6. " K (" & Sheets("Tabelle1").Cells(3, 2).Value & _
    7. " K - " & Sheets("Tabelle1").Cells(3, 3).Value & " K)"
    8. x = Tabelle1.ChartObjects(1).Chart.ChartTitle.Text
    9. For i = 1 To Len(x)
    10. If Mid(x, i, 1) = "T" Or Mid(x, i, 1) = "K" Then
    11. Tabelle1.ChartObjects(1).Chart.ChartTitle.Characters(i, 1).Font.Italic = msoTrue
    12. Else
    13. Tabelle1.ChartObjects(1).Chart.ChartTitle.Characters(i, 1).Font.Italic = msoFalse
    14. End If
    15. Next i
    16. End Sub



    Schade da war ich wohl zu langsam!
    Hey "-manne-" und "petaod",

    ein riesen DANKE an euch beide, dass ihr mir so schnell geholfen habt!
    Ihr seid die Besten!

    Ohne euch wäre ich wohl aufgeschmissen gewesen, danke.
    Wünsch euch schon mal ein schönes Wochenende.

    Gruß