置換したら、置換後の文字に訂正線が拡張されてしまう現象 ②
昨日は、既に設定された取り消し線が、置換した文字に影響する現象について、対策を考えてみた。
infoment.hatenablog.com
今日は結局この課題が、職場でどのように帰着したかについて報告する。
まず、確認したところ、要件が完全に逆だった。取り消し線を付した文字は、上ではなく下に来るのが、運用上の正解とのこと。
文字列の一部だけを訂正するケースは無い、とのこと。
例えば ↓ のように、「りんごです」の「りんご」だけに取り消し線が引かれることは無い。
取り消しは、複数回にわたって行われる場合がある。
以上の条件から、色々と単純化することができた。
Sub CorrectCharacter(target_range As Range, _ cc_what As String, _ cc_corrected As String) ' 改行の統一。 target_range.Replace vbLf, vbNewLine target_range.Replace vbCrLf, vbNewLine ' 処理対象文字を改行で分割。 Dim tempArray As Variant tempArray = Split(target_range.Value, vbNewLine) ' 改行がなく、且つ、セル内の文字が修正対象ではない場合に限り、処置不要。 If UBound(tempArray) = 0 Then If cc_what <> tempArray(0) Then Exit Sub End If End If With target_range ' 修正後の文字を先頭に追加したうえで、残りの文字も改行で結合。 .Value = cc_corrected & vbNewLine & Join(tempArray, vbNewLine) ' 追加した文字については、訂正線無し。 .Characters(1, Len(cc_corrected)).Font.Strikethrough = False ' 元からあった文字は全て、訂正線有り。 .Characters(Len(cc_corrected) + 1).Font.Strikethrough = True End With End Sub
一部、某ドラマのセリフなども借りてテストしてみた。
結果は、↓ こんな感じだ。
ちなみに今回、Characters の Length を省略すると、残りの文字全部が対象になることを初めて知った。Mid関数もVBAの場合、長さを省略すると残り全部になるので、ひょっとしたらと試してみた結果だった。
参考まで。