VBA100本ノック 13本目:文字列の部分フォント
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
「注意」という文字があるかを判定し、更にそれが何文字目から始まるかを
確認して赤の太字にする。
今回立てた作戦は、こうだ。
- セル内に文字がある場合、その文字を「注意」で分割する。
- 分割できれば、「注意」が一つ以上含まれる。その前後の文字数で、
「注意」の位置を特定する。 - 特定した「注意」を、赤の太字にする。
実際に作成したマクロがこちら。
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回目以降の注意の開始位置を取得
するのに、少し悩んでしまった。
解答を実行した結果がこちら。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。