[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『2重検索を行いたい』(seira)
いつも拝見させていただいております
大変お手数と思いますが
ご教示頂けたら幸いです
2つの異なる条件から値を検索したいと思っています
検索される側 16桁の数字文字列
検索する側
第一条件 Range("A1").Value 文字列2桁数字
第二条件 Cells(2, 1).Value 文字列2桁数字
この時下記の条件合うように変更したいのですが
どの様にすれば良いのでしょうか
第一条件は 検索される側の下8,7桁目
第二条件は 検索される側の下2,1桁目
Sub 二重条件検索()
Dim FindCel As Range '検索結果を記録'
Dim FirstCel As Range '検索にヒットした最初のセルを記録
Dim i As Long
Set FindCel = Sheets("RA_RA").Range("R:R").Find(what:=Range("A1").Value) '一つ目の検索ワードを検索'
If FindCel Is Nothing Then
Else
Set FirstCel = FindCel If InStr(FindCel.Value, Cells(2, 1).Value) <> 0 Then 'セルに二つ目の検索ワードが含まれている場合' MsgBox FindCel.Row & "行目の" & FindCel.Column & "列目です。" Else Do Set FindCel = Cells.FindNext(FindCel) '目的のセルが見つかるまで検索を繰り返す’
If FindCel.Address = FirstCel.Address Then '検索対象の終端に達した' MsgBox "検索ワードにヒットしませんでした。" Exit Do '検索終了' End If
If InStr(FindCel.Value, Cells(2, 1).Value) <> 0 Then 'セルに二つ目の検索ワードが含まれている場合' MsgBox FindCel.Row & "行目の" & FindCel.Column & "列目です。" Exit Do End If Loop End If End If
End Sub
お手数お掛けしますが
宜しくお願いいたします
< 使用 Excel:Excel2010、使用 OS:Windows7 >
(1)「Sheets("RA_RA").Range("R:R")」を検索範囲として 「Range("A1")」の値と同じものを”含んでいる”セルを探す
(2)(1)でセルが見つかれば、そのセルに「Range("A2")」の値と同じものが”含まれるか”判定して、
(3)(2)の判定が真ならセル番地をメッセージボックスで見つかるごとに表示したい
(4)(1)〜(3)を繰り返し
ってことでいいですか?
(もこな2) 2018/02/22(木) 16:15
>(1)「Sheets("RA_RA").Range("R:R")」を検索範囲として 「Range("A1")」の値と同じものを”含んでいる”セルを探す
検索される値 例 2018021705010701 このような16桁構成になっています
検索値 Range("A1") 例05
この時 下8〜7桁 05を探す 例 20180217 05 010701
>(2)(1)でセルが見つかれば、そのセルに「Range("A2")」の値と同じものが”含まれるか”判定して、
検索値 Cells(2, 1).Value 例01
検索される側の下2桁 01
例 20180217050107 01
この二つの条件を含んだ値のセル値を探したいのです
何卒宜しくお願いいたします
(seira) 2018/02/22(木) 16:37
これって、二重にしなくても桁数が決まっているので Findメソッド使うなら、ワイルドカード使って1回で済むんじゃないですかね?
Sub 二重条件検索() Dim FindCel As Range '検索結果を記録' Dim FirstCel As Range '検索にヒットした最初のセルを記録 Set FindCel = Sheets("RA_RA").Range("R:R").Find(What:="*" & Range("A1").Value & "????" & Range("A2").Value, LookAt:=xlWhole) '一つ目の検索ワードと二つ目を同時検索' If Not FindCel Is Nothing Then Set FirstCel = FindCel Do Set FindCel = Cells.FindNext(FindCel) '目的のセルが見つかるまで検索を繰り返す’ MsgBox FindCel.Row & "行目の" & FindCel.Column & "列目です。" If FindCel.Address = FirstCel.Address Then '検索対象の終端に達した' MsgBox "検索終了" Exit Do '検索終了' End If Loop End If End Sub (ろっくん) 2018/02/22(木) 16:44
お手数かけて申し訳御座いません
下記の部分で NO91 変数エラーが 下記の部分で出てしまいます
MsgBox FindCel.Row & "行目の" & FindCel.Column & "列目です。"
Range だとダメなのでしょうか?
(seira) 2018/02/22(木) 17:00
コードを見る限り
「目的のセルが見つかるまで検索を繰り返す」じゃなくて「FindNextで見つかるものがFindでみつかったものと同じになるまで繰り返す」になってるから、R列全部みることになるとおもうんですが・・・
※ループを抜ける処理が見当たらないし(私の見落としであればすみません)
※絶対に2個以上該当するものが無いのであればFindNextいらないですよね?
(もこな2) 2018/02/22(木) 17:18
ただ色々調べてると ノーヒットの可能性が大きいみたいですね
データーは存在しております
文字列に対すエラーなのか と思っていますが
回避策は見つからない状態です
>※絶対に2個以上該当するものが無いのであればFindNextいらないですよね?
仰るとおりです とりあえず セル番地もとめてから 次の作業に入ろうかと考えています
ただこの番地が求められないと 次のステップに移行できないものでして
教えていただけるなら 御教示頂きたいです
(seira) 2018/02/22(木) 17:35
あ、すみません。 検索条件のシートとデータの入っているシートが違うんですね。 ついでに見つからなかった時の処理書き忘れたので入れました。
Sub 二重条件検索() Dim FindCel As Range '検索結果を記録' Dim FirstCel As Range '検索にヒットした最初のセルを記録 Set FindCel = Sheets("RA_RA").Range("R:R").Find(What:="*" & Range("A1").Value & "????" & Range("A2").Value, LookAt:=xlWhole) '一つ目の検索ワードを検索' If Not FindCel Is Nothing Then Set FirstCel = FindCel Do Set FindCel = Sheets("RA_RA").Cells.FindNext(FindCel) '目的のセルが見つかるまで検索を繰り返す’ MsgBox FindCel.Row & "行目の" & FindCel.Column & "列目です。" If FindCel.Address = FirstCel.Address Then '検索対象の終端に達した' MsgBox "検索終了" Exit Do '検索終了' End If Loop Else MsgBox "検索ワードにヒットしませんでした。" End If End Sub (ろっくん) 2018/02/22(木) 17:37
FindNextいらないですよね?
↑ごめんなさい。ここ理解しました。
最初のは2重で処理しようとしていて、FindNextつかってて、2つめの条件に一致したら、そこで Exit Do してるんですね。
そうなると、二重処理がいらないから、Findメソッドだけで対応すればokっぽいですね。
ちなみに、Findメソッドの省略可能な引数のうち、いくつかの引数は前回値を承継するので、意図して省略してないのであれば、手動も含めて、前回実施した検索によっては今まで動いていたマクロが突然動かなくなることもあるって覚えておいた方がいいとおもいます。
また、Findメソッド以外にも、単一の列(行)のどこに検索値と合致するものがあるのか調べるには、ワークシート関数のMATCH関数を使うって方法もあるので、興味があったら研究してみるのも良いかもしれません。
(もこな2) 2018/02/22(木) 17:42
有難う御座いました
助かりました
もこな2様
色々有難う御座います
(seira) 2018/02/22(木) 17:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.