自作マクロ機能のAIアップグレード:FindAll

生成系AIの出現により、ここ数年で色々なものが随分と様変わりした。
最近ではExcel VBAにおいても、仕様をAIに伝えて作ってもらうことが多くなった。

そこで今回は、以前作成したものの「いまいち」だったマクロを、改めてAIに添削してもらった。素材となるのはこちら。
infoment.hatenablog.com

添削結果がこちら。

Function FindAll(target_range As Range, _
                 faWhat As String, _
        Optional faLookIn As Excel.XlFindLookIn = xlValues, _
        Optional faLookAt As Excel.XlLookAt = xlPart, _
        Optional faMatchCase As Boolean = False, _
        Optional faMatchByte As Boolean = False) As Range

    Dim FindCell As Range
    Dim FirstAddress As String
    Dim TempRange As Range

    ' 最初の一致を見つける
    Set FindCell = target_range.Find(What:=faWhat, _
                                     LookIn:=faLookIn, _
                                     LookAt:=faLookAt, _
                                     MatchCase:=faMatchCase, _
                                     MatchByte:=faMatchByte)
    
    ' 一致するものがない場合、関数を終了する
        If FindCell Is Nothing Then
            Exit Function
        End If
    
    ' 最初に見つかったセルのアドレスを保存する
        FirstAddress = FindCell.Address
    Set TempRange = FindCell
    
    ' すべての一致を見つけるためにループ
        Do
            Set FindCell = target_range.FindNext(FindCell)
            If FindCell Is Nothing Then Exit Do ' セーフティチェック
            If FindCell.Address = FirstAddress Then Exit Do
            ' 新しいセルが既にTempRangeに含まれていないかを確認
            If Intersect(TempRange, FindCell) Is Nothing Then
                Set TempRange = Union(TempRange, FindCell)
            End If
        Loop
    
    ' 一致するすべての範囲を返す
    Set FindAll = TempRange
End Function

なるほど、確かにすっきりした。しかし、丸投げはよくない。テストしよう。

Sub test()

    FindAll(ActiveSheet.Cells, "ターゲット").Interior.Color = vbRed

End Sub

結果がこちら。

AIさん、さすがです。
ご参考まで。