一文字ずつ探して蛍光色つけるWordマクロ
はじめに
最近、ものすごく久々にWordのVBAをいじるお仕事がありました。
なので、ついでに「一文字ずつ探して蛍光色つけるWordマクロ」を作ってみました。(頼まれたものとはあんまり関係なかった)
できたもの
こんな感じです。
指定した文字列を一つずつ探して行って、蛍光色をつけます。
コード
'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も使えると、なんか色々便利になりそうですね(あんまり思いつかないけど)
おまけ
暇な場合は、かの名作「はしょれメロス」が、ちゃんとはしょっているかの確認とかもできます。
はしょれメロス pic.twitter.com/SmB6avu8DP
— フロクロ(Frog96) (@2r96) 2019年5月2日