may the VBA be with you

Excel VBAとか業務自動化とか

一文字ずつ探して蛍光色つけるWordマクロ

はじめに

最近、ものすごく久々にWordのVBAをいじるお仕事がありました。
なので、ついでに「一文字ずつ探して蛍光色つけるWordマクロ」を作ってみました。(頼まれたものとはあんまり関係なかった)

できたもの

f:id:vba-belle-equipe:20210703172216g:plain
たすけてファインダー

こんな感じです。
指定した文字列を一つずつ探して行って、蛍光色をつけます。

コード

'sleepを使うための準備
#If Win64 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub 一文字ずつ探して蛍光色つける()
    Dim str As String
    Dim strLen As Long
    str = "たすけて"       '対象の文字列を指定
    strLen = Len(str)
    
    '文書の蛍光色をすべてクリアする
    ActiveDocument.Range.HighlightColorIndex = wdNoHighlight
    
    Dim i As Long
    Dim idx As Long
    idx = 0
    
    '文字列を最初から1文字ずつ探していく
    For i = 1 To strLen
        Sleep (1000)    '指定したミリ秒実行を待つ
        idx = 蛍光ペンで色をつける(Mid(str, i, 1), idx)
        
        '見つからなかったらその時点で終了
        If idx = -1 Then
            Exit For
        End If
    Next
End Sub

'str : 対象の文字列
'start : 検索を始める場所(カーソル位置)
Function 蛍光ペンで色をつける(str As String, start As Long) As Long
    '検索開始位置を指定
    Selection.start = start
    Selection.End = start
    With Selection.Find
        .Text = str
        .MatchFuzzy = False
        .MatchWildcards = True
        .Execute
    End With
    
    Dim ans As Long    '指定した文字が見つかった場所を記録(functionの最後で返す)
    ans = Selection.End
    If start = ans Then
        ans = -1
        Debug.Print str & "_見つからない"
    Else
        Debug.Print str & "_" & Selection.start
        
        '蛍光色つける
        ActiveDocument.Range(Selection.start, Selection.End).HighlightColorIndex = wdRed
    End If
    
    蛍光ペンで色をつける = ans
End Function

コードの説明など

Selection.Findが検索する部分ですが、Selection.start でカーソルを移動させておくと、そこ以降から検索できるので、今回はそのようにしてみました。
つまり、色をつけた場所より前で、次の文字が見つかることはありません。

蛍光色の一覧はこちらです(色見えないけど)
docs.microsoft.com

一瞬で全て見つけて色を変えられてもつまらない(?)ので、sleepを使ってみました。

感想

普段はWordのVBAを触らないどころか、Wordを開くこともほぼ無いんですが、蛍光色をつけられるというのが面白かったです。
WordのVBAも使えると、なんか色々便利になりそうですね(あんまり思いつかないけど)

おまけ

暇な場合は、かの名作「はしょれメロス」が、ちゃんとはしょっているかの確認とかもできます。

f:id:vba-belle-equipe:20210704145206g:plain
はしょれメロス確認中