元の文字列を残し訂正線を引いたうえで、訂正後の文字を改行して追加したい ①

先日、こんな依頼を受けた。
「リストで商品名の訂正を行う際、元の文字列を残し訂正線を引いたうえで、訂正後の文字を改行して追加したい」
例えば、↓ こんな感じだ。
f:id:Infoment:20190718223349p:plain

今までは手作業でやっていて、手間がかかって仕方がない。何とか簡単にならないかという相談だった。そこで今回は、上記の作業支援マクロに挑戦する。
f:id:Infoment:20190718223735p:plain

取り敢えず、引数として以下の三つを準備する。

  1. 文字列が書かれたセル
  2. 変更前の文字
  3. 変更後の文字

作戦としては、こんな感じだ。

  1. 変更前と変更後の文字列を改行で結合する。
  2. 変更前の文字列分だけ、訂正線を引く。

「変更前の文字列分だけ」については、Charactersを用いて指定する。また、訂正線の有無は、FontのメンバーであるStrikethroughを用いる。

Sub CorrectCharacter(target_range As Range, _
                     source_chara As String, _
                     corrected_chara As String)
    ' 文字列の結合
        target_range = source_chara & vbNewLine & corrected_chara
    
    ' 先頭から訂正前までの文字列分、訂正線を追加する。
        target_range.Characters(Start:=1, Length:=Len(source_chara)). _
        Font.Strikethrough = True
End Sub

テストしてみよう。

Sub test()
    CorrectCharacter Selection, "りんご", "林檎"
End Sub

f:id:Infoment:20190718225402g:plain

結果は上々。だけど本当は、このような編集方法はあまり推奨できない。なぜならこれは、手書きの見た目をExcel上で再現するためのものであって、データの流用性を著しく損ねる方法だから。

出来れば今後は、このような方式に改めて欲しいところです。
f:id:Infoment:20190718225735p:plain

参考まで。