15年前に書いたマクロ

ふとした偶然から、私が15年ほど前に書いたマクロが目に留まった。
恐ろしいことに、今も使われているらしい。恥を忍んで、ここに再現しよう。

Sub 全角文字変換()

Dim 全角文字 As String

Do Until ActiveCell.Value = ""

全角文字 = ActiveCell.Value

全角文字 = StrConv(全角文字, vbWide)

ActiveCell.Value = 全角文字

ActiveCell.Offset(1, 0).Activate

Loop

End Sub

ちなみに、「半角文字変換」も存在する。字下げも何もしていない。アクティブなセルから、わき目も降らず真下に降りていきながら、手あたり次第に全角化していく。そして、空白セルがあれば「ガツン」と止まる。40年近く前のチョロQを彷彿とさせる、直向な動き。わが作品ながら、少し気に入っている。

ところでこの、「今も使われている」が、実は厄介っかいだったりする。コッソリ直して、例えば空白セルがあっても乗り越える作りにすると、ユーザーにとっては「想定外の動き」になる。例えそれが、良かれと思っての改修だとしても。

そこで現在の動きを変えずに、リニューアルしてみた。

Private Property Get TargetRange() As Range
    Set TargetRange = Range(ActiveCell, ActiveCell.End(xlDown))
End Property
Function 文字幅変換(Optional wide_type As VBA.VbStrConv = vbWide) As Variant
    Dim arr As Variant
        arr = TargetRange

    Dim i As Long
        For i = 1 To TargetRange.Rows.Count
            arr(i, 1) = StrConv(arr(i, 1), wide_type)
        Next

        文字幅変換 = arr
End Function
Sub 全角文字変換()
    TargetRange = 文字幅変換
End Sub
Sub 半角文字変換()
    TargetRange = 文字幅変換(vbNarrow)
End Sub

こんな改造が行われたなど、隣に座っているユーザーは知る由もない。

今日はちょっとだけ、とてもとてもほんの少しだけ、墨子の気分かも。
business.nikkei.com


参考まで。