web-dev-qa-db-ja.com

連結式の太字テキスト

連結式を使用するときに、1つまたは2つの特定の単語を文章で太字にすることができます。以下に例を示します。

enter image description here

最初の文は連結式を使用しています。 2番目の文は手動で入力およびフォーマットされます。毎回手動で行うことなく、連結式にこの書式を設定する方法はありますか?

これは単なる例であり、3つの連続した単語の文字列を別の文で太字にするために使用する必要がある場合があることに注意してください。一般的なルールが提供されていれば、今後の作業に取り組むことができます。

私は数式にある程度精通していますが、VBAを使用したことはありません。ただし、この問題の解決策はVBAを使用した場合にのみ利用できると思われます。 VBAソリューションが必要な場合は、立ち上げて理解するのに時間と労力がかかるので、ご注意ください。

お時間をいただきありがとうございます。

編集:

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

最後の部分をさらに拡張して、4番目と6番目の文字列を太字にするにはどうすればよいですか?

5
Noctis

セルに数式が含まれている場合、セルテキスト内の個々の文字を書式設定することはできません。
Excelはそれをサポートしていません。


Workaround

唯一の回避策は、セルテキストを数式ではなく定数テキスト(VBAを使用)として記述することです(要件を満たす場合)。

次に、以下を使用して個々の文字をフォーマットできます。

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

したがって、文字列を部分的にフォーマットするには、次の例を調整できます

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

より多くの部分文字列の場合、配列を使用する方が簡単です。

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ᴇʜ