VBA100本ノック 13本目:文字列の部分フォント

こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。

上記リンク先から、問題文を転載。
f:id:Infoment:20220120224114p:plain

「注意」という文字があるかを判定し、更にそれが何文字目から始まるかを
確認して赤の太字にする。

今回立てた作戦は、こうだ。

  1. セル内に文字がある場合、その文字を「注意」で分割する。
  2. 分割できれば、「注意」が一つ以上含まれる。その前後の文字数で、
    「注意」の位置を特定する。
  3. 特定した「注意」を、赤の太字にする。

実際に作成したマクロがこちら。

Sub VBA_100Knock_013()
    Dim r As Range
    Dim arr As Variant
    Dim i As Long
    Dim j As Long
    Dim StartLength As Long
        On Error Resume Next
        For Each r In Selection
            If r <> vbNullString Then
                arr = Split(r, "注意")
                If IsArray(arr) Then
                    For i = 0 To UBound(arr) - 1
                        StartLength = 0
                        ' 赤の太文字にすべき「注意」の直前までの文字数。
                        ' ※事前に「注意」が登場している場合、それを除く。
                        For j = 0 To i
                            StartLength = StartLength + Len(CStr(arr(j)))
                        Next
                        ' 事前に登場した「注意」の文字数を追加し、1を加え
                        ' 今回赤の太文字にする「注」の位置とする。
                        StartLength = StartLength + 2 * i + 1
                        With r.Characters(Start:=StartLength, Length:=2).Font
                            .Color = vbRed
                            .Bold = True
                        End With
                    Next
                End If
            End If
        Next
End Sub

複数回「注意」が登場する場合の、2回目以降の注意の開始位置を取得
するのに、少し悩んでしまった。


解答を実行した結果がこちら。
f:id:Infoment:20220120231357g:plain

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。