VBAの勉強を始めてみた

色々試しています。

検索に一致したセルのみを選択する

選択範囲内で、該当する文字が入っているセルのみを選択する簡単なマクロです。
セルを選択させたのち、セルの背景色を変えるまでをマクロにしてみようと思ったんですが、ふと思い直し、選択するのみにとどめてみました。

 

ためしに、選択範囲内で3の入っているセルのみを選択させます。

f:id:kouten0430:20180409233523j:plain

 

f:id:kouten0430:20180409234915j:plain

 

f:id:kouten0430:20180409233536j:plain

 

選択されていれば、あとは背景色を変えようが

f:id:kouten0430:20180409233613j:plain

 

文字色を変えようが

f:id:kouten0430:20180409233628j:plain

 

文字をクリアしようが・・・・・・、自由

f:id:kouten0430:20180409233642j:plain

 

使い方を、使用者のセンスに任せるスタンス。小説でいうと、読者の皆様の想像にお任せするのと同じ(←ぇ)

 

 

特殊文字も簡単に検索できるように、

 

[

#

?

 

は、ワイルドカードとして使用できないようにしましたが、

 

*

 

は、ワイルドカードとして使用できるように残しときました。

 

Sub 検索に一致したセルのみを選択する()
    '選択範囲内で指定文字を使って検索を行い、検索に一致したセルのみを再選択します
    'ワイルドカードを使って部分一致検索にすることもできます
    'InputBoxが空白なら、空白セルのみを選択します
    '* を検索する場合はこの文字を[]で囲みます。
    Dim myRange As Range
    Dim myUni As Range
    Dim sw As String
    
    sw = Application.InputBox(Prompt:="検索する文字を指定して下さい。" & vbCrLf & "(ワイルドカードは * のみ使用できます)", Type:=2)
        If sw = "False" Then
            Exit Sub
        End If

    sw = Replace(sw, "[", "[[]")
    sw = Replace(sw, "[", "[[]")
    sw = Replace(sw, "#", "[#]")
    sw = Replace(sw, "#", "[#]")
    sw = Replace(sw, "?", "[?]")
    sw = Replace(sw, "?", "[?]")

    For Each myRange In Selection.SpecialCells(xlCellTypeVisible)   '可視セルのみに処理を行う
        If CStr(myRange.Value) Like sw And myRange.Address = myRange.MergeArea(1).Address Then
            If myUni Is Nothing Then
                Set myUni = myRange    '検索に一致した一番最初のセル
            Else
                Set myUni = Union(myUni, myRange)    '検索に一致した二番目以降のセル
            End If
        End If
    Next myRange
    
    If Not myUni Is Nothing Then
        myUni.Select    '検索に一致したセルをまとめて選択する
    End If

End Sub

※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら