web-dev-qa-db-fra.com

Texte en gras dans une formule concaténée

J'aimerais pouvoir mettre un ou deux mots spécifiques en gras dans ma phrase lorsque j'utilise une formule concaténée. Un exemple est présenté ci-dessous.

enter image description here

La première phrase utilise la formule concaténée. La deuxième phrase est tapée et formatée manuellement. Existe-t-il un moyen d'avoir cette mise en forme dans la formule de concaténation sans avoir à le faire manuellement à chaque fois?

Veuillez noter qu'il ne s'agit que d'un exemple et que je devrai peut-être l'utiliser pour mettre une chaîne de trois mots consécutifs en gras dans une phrase différente. Si une règle générale était fournie pour que je puisse travailler en avant, ce serait formidable!

Je maîtrise un peu les formules mais je n'ai jamais utilisé VBA. Cependant, je soupçonne que la solution à ce problème n'est disponible qu'avec VBA. Veuillez être attentif si une solution VBA est requise, car il me faudra du temps et des efforts pour démarrer et comprendre.

Merci pour votre temps et votre aide.

Éditer:

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String, str4 As String, str5 As String, str6 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"
    str4 = "Fourth string "
    str5 = "Fifth string "
    str6 = "Sixth string"


    Range("A1").Value = str1 & str2 & str3 & str4 & str5 & str6 'concatenate strings

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

Comment étendre la partie finale pour rendre les quatrième et sixième cordes audacieuses?

5
Noctis

Vous ne pouvez pas mettre en forme des caractères individuels dans un texte de cellule si cette cellule contient une formule.
Excel ne prend pas en charge cela.


Workaround

La seule solution consiste à écrire ce texte de cellule sous la forme texte constant (avec VBA) au lieu d'une formule (si cela répond à vos besoins).

Ensuite, vous pouvez formater des caractères individuels avec:

Range("A1").Characters(Start:=1, Length:=10).Font.Bold = True

Donc, pour formater partiellement une chaîne, vous pouvez ajuster l'exemple suivant

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"

    Range("A1").Value = str1 & str2 & str3 'concatenate strings

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

Pour plus de sous-chaînes, il serait plus facile d'utiliser un tableau.

Public Sub ExampleConcatenate()

    Dim SubStrings As Variant
    SubStrings = Array("First string ", _
                       "Second string ", _
                       "Third string ", _
                       "Fourth string ", _
                       "Fifth string ", _
                       "Sixth string")

    Range("A1").Value = Join(SubStrings, "")

    'Note array counting starts with 0 not 1 so "First string" is SubStrings(0)

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(SubStrings(0)) + 1, Length:=Len(SubStrings(1))).Font.Bold = True
    'format sub string 4
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + 1, Length:=Len(SubStrings(3))).Font.Bold = True
    'format sub string 6
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + Len(SubStrings(3)) + Len(SubStrings(4)) + 1, Length:=Len(SubStrings(5))).Font.Bold = True

End Sub
7
Pᴇʜ