excel vbaの「find」を簡単に説明しました。
excelのvbaをマスターしましょう!
excel vba 簡単・解決! Homeへ
find
excelのvbaで find は、代表的な「検索」メソッドです
1.全てのセルを検索する方法
Set objRange = Cells.Find("鈴木")
この命令により全セル範囲の最初から検索し、最初に見つかったセルを返します。
セルが見つからない場合、 Nothing を返します。
使用例
Sub Find_test()
Dim objCell As Range
Set objCell = Cells.Find("鈴木")
If Not objCell Is Nothing Then
objCell.Activate
End If
End Sub
2.Findメッソドの引数
(1)What := "鈴*" '検索するデータ、Variant型、ワイルドカード文字列を使用できます。
'以降は、省略できます。
(2)After := Range("$C$12") '検索を開始するRangeオブジェクト
(3)LookIn := xlValues '検索対象、xlValues:文字や数値、xlFormulas:数式、xlNotes:メモ
(4)LookAt := xlWhole '一部か全部か?、xlWhole:完全一致、xlPart:一部
(5)SearchOrder := xlByRows '検索方向、xlByRows:行方向を先に検索、xlByColumns:列方向を先に検索
(6)SearchDirecton := xlNext '次か前か、xlNext:次を検索(規定値)、xlPrevious:前を検索
(7)MatchCase := FALSE '大文字小文字の区別、FASLE:区別しない(規定値)、TRUE:区別する
(8)MatchByte := Ture '半角・全角の区別、Ture:区別する、False:しない。規定値は、前回の値。
(注意:引数 LookIn、LookAt、SearchOrder、および MatchByte の設定は、このメソッドが使われるたびに保存されます。)
●EXCELのヘルプからFindの使用例を引用しました。
この中に使用されている .FindNextメッソドは、次の対象となるセルを続けて検索する命令です。
シート 1 のセル範囲 A1:A500 で、値に 2 が含まれているセルを検索し、その値を 5 に変更します。
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
●列Aの最初の空白となっているセルを見つける方法
If ActiveSheet.UsedRange.Count < 2 Then
MsgBox 1
Else
MsgBox Columns("A:A").Find(What:="", LookAt:=xlWhole).Row
End If
●シートの最終行を見つける方法
直接的な方法は
MsgBox ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
これをFindメソッドで実現する方法は、次の通りです。
Sub Find_Test()
Dim StartR As Long, StartC As Long
Dim LastR As Long , LastC As Long
With ActiveSheet
LastR = .Cells.Find("*", .Cells(1), xlValues, xlPart, xlByRows, xlPrevious).Row
LastC = Cells.Find("*", .Cells(1), xlValues, xlPart, xlByColumns, xlPrevious).Column
MsgBox .Range(.Cells(1, 1), .Cells(LastR, LastC)).Rows.Count
End With
End Sub
3.連続した検索
(1)FindNextメッソドは、次の対象セルを検索できます。
Set objRange00 = Range("A1:B100").Fined("鈴*")
Set objRange01 = Range("A1:B100").FineNext(objRange00)
使用例は、2.で紹介しました。
(2)FindPreviousメッソドは、前の対象セルを検索します。
4.メッソド使用上の注意
FindNext、FindPreviousの検索は、対象のセル範囲の左上からスタートします。
注意する点は、全て検索し終わても検索が終了しないことです。
上記の例で示した、終了判定をプログラムする必要があります。
【コラム】 手操作で複数のワークシートから文字列を検索する方法を VBA で実現するには
次の図は、複数のワークシートをSiftを押しながら選択し、Ctrl+f キーを押して「検索」ダイアログを表示した結果です。
「すべて検索」ボタンを押すと、例えば「ねこ」を含むブック、シート、セルを一覧表で見ることができます。
また、リストのある行をクリックすると、そのセルをアクティブにできます。

●では、この操作をVBAを使用して実現した結果を次に示しました。
【例1】
次の例は、ワークシートをアクティブにし、マクロを実行する必要があります。
Sub search_test()
Dim objWs As Worksheets
Dim objW As Worksheet
Dim objData As Variant, strNeko As String
strNeko = Worksheets(1).Range("A1").Value ' 検索キーワードをセル A1へ入力しました。 ここでは「ねこ」です。
For Each objW In ActiveWorkbook.Worksheets
Set objCell = Cells.Find(strNeko)
For Each neko In objCell
neko.Select
Next neko
Next objW
End Sub
上記のマクロをシートをアクティブにして実行すると、全てのシートの「ねこ」の文字列を含むセルが選択状態になります。
【例2】 配列を使用した例です。
次の例は、ワークシートをアクティブにし、マクロを実行する必要があります。
Sub array_test()
Dim intF As Integer
Dim varShar As Variant
varShar = Array(1, 2, 3) ' ワークシートを左から3つSiftキーを押しながら選択した操作を実現するための配列です。
intF = 0
For Each Var In varShar
If intF = 0 Then
Sheets(Var).Select
intF = 1
Else
Sheets(Var).Select False
End If
Next Var
Worksheets(1).Range("A1").Select ' 検索キーワードをセル A1へ入力しました。 ここでは「ねこ」です。
SendKeys "^c"
SendKeys "^f"
SendKeys "^v"
SendKeys "{Enter}"
End Sub
excelのvbaをマスターしましょう。
excel vba 簡単・解決! Homeへ
【検索・抽出の最新記事】

