検索に一致したセルのみを選択する
選択範囲内で、該当する文字が入っているセルのみを選択する簡単なマクロです。
セルを選択させたのち、セルの背景色を変えるまでをマクロにしてみようと思ったんですが、ふと思い直し、選択するのみにとどめてみました。
ためしに、選択範囲内で3の入っているセルのみを選択させます。
選択されていれば、あとは背景色を変えようが
文字色を変えようが
文字をクリアしようが・・・・・・、自由。
使い方を、使用者のセンスに任せるスタンス。小説でいうと、読者の皆様の想像にお任せするのと同じ(←ぇ)
特殊文字も簡単に検索できるように、
[
#
?
は、ワイルドカードとして使用できないようにしましたが、
*
は、ワイルドカードとして使用できるように残しときました。
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までをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら。