置換したら、置換後の文字に訂正線が拡張されてしまう現象 ②

昨日は、既に設定された取り消し線が、置換した文字に影響する現象について、対策を考えてみた。
infoment.hatenablog.com

今日は結局この課題が、職場でどのように帰着したかについて報告する。
f:id:Infoment:20190722221035p:plain

まず、確認したところ、要件が完全に逆だった。取り消し線を付した文字は、上ではなく下に来るのが、運用上の正解とのこと。
f:id:Infoment:20190722221513p:plain

文字列の一部だけを訂正するケースは無い、とのこと。
例えば ↓ のように、「りんごです」の「りんご」だけに取り消し線が引かれることは無い。
f:id:Infoment:20190722221655p:plain

取り消しは、複数回にわたって行われる場合がある。
f:id:Infoment:20190722223108p:plain

以上の条件から、色々と単純化することができた。

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

一部、某ドラマのセリフなども借りてテストしてみた。
結果は、↓ こんな感じだ。
f:id:Infoment:20190722222647g:plain

ちなみに今回、Characters の Length を省略すると、残りの文字全部が対象になることを初めて知った。Mid関数もVBAの場合、長さを省略すると残り全部になるので、ひょっとしたらと試してみた結果だった。

参考まで。