スポンサードリンク
スポンサードリンク

find

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へ
タグ:EXCEL VBA find
【検索・抽出の最新記事】
posted by Yy at 14:38 | Comment(0) | TrackBack(0) | 検索・抽出 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/129485932

この記事へのトラックバック