ワークシート上の表からキーワードを検索する方法は幾つかありますが、VLookupとFindの例を紹介します。検索はその行為だけでなく、そのキーワードの隣のデータを取得する、キーワードの個数をカウントするなど別の処理と結びついています。いくつかの例をまとめてみました。 1.KeyWordが左端にある場合(VLookup) †KeyWordが範囲(Range)の左端の列にある場合Application.VLookupを使用すると高速で簡単です。 VLookup(検索値, 範囲, 列番号, 検索の型) パラメータの意味:
注1:完全一致を検索する場合は、必ずFalseを設定して下さい。また、第3引数の後ろに「,」のみがある場合、第4引数を省略したとはみなされず、FALSEが指定されたものとみなされます。 以下の例はKeyWord(例:"A")の右隣の値がTargetWord(例:"AAA")と一致するかというデータの検証のFunctionです。KeyWordが複数無いという前提です。データ検証のためKeyWordが無くてもTargetWordが無くてもFalseとするようにしています。この例でSerchWordを戻すようにすると、右隣のデータを取得することができます。ここでSerchWordのデータ型はVariantです。これはKeyWordが範囲内で見つからなかった時にVLookupが返すエラーを受取るためです。 Function MatchKeyWord(LookupRange As Range, KeyWord As String, _ TargetWord As String) As Boolean Dim SerchWord As Variant MatchKeyWord = False SerchWord = Application.VLookup(KeyWord, LookupRange, 2, False) '← 2 = 右隣 If IsError(SerchWord) Then '← KeyWordが無かった場合 'NOP ElseIf SerchWord = TargetWord Then '← TargetWordが一致した場合 MatchKeyWord = True End If End Function 2.KeyWordが左端にない場合( Find Methods ) †KeyWordが範囲(Range)の左端の列にない場合Vlookupは使用できません。その場合のFindメソッドを使用した例を紹介します。
(注意:引数 LookIn、LookAt、SearchOrder、および MatchByte の設定は、このメソッドが使われるたびに保存されます。) Function example601(FindRange As Range, KeyWord As String) As String
Dim row As Range
Set row = FindRange.Find(what:=KeyWord, _
LookIn:=xlValues, lookat:=xlWhole, _
SearchOrder:=xlByRows, searchDirection:=xlNext)
If row Is Nothing Then
example601 = "False"
Else
example601 = row.Offset(0, 1).Value '← Offset(0, 1) = 右隣
End If
Set row = Nothing
End Function
3.KeyWordのある行を求める場合(Match) †Vlookup関数ではKeyWordのある行の値を求めましたが、行番号を求める場合はMatchを使用します。 Match(検索値, 範囲, 検索の型) パラメータの意味:
以下の例はKeyWord(例:"A")の値がMatchRangeの領域内にある場合の行を返すFunctionです。KeyWordが見つからなかった場合は0を返します。
簡単なのでわざわざ関数を作らなくてもいいと思いますので以下は使用方法のサンプルと思って下さい。 Function MatchRow( KeyWord As String, MatchRange As Range ) As Long Dim SerchRow As Variant SerchRow = Application.Match(KeyWord, MatchRange , 0) If IsError(SerchRow ) Then '← KeyWordが無かった場合 MatchRow = 0 Else '← KeyWord が見つかった場合 MatchRow = SerchRow End If End Function ![]() ![]() Last-modified: 2016-06-22 (水) 17:06:45 (2725d)
|