
困っているというわけではないのですが、ヘルプなどを見ても特に詳しいことに触れてないのでお世話になりたいと思います。
つい数日前までブックAにある文字列でブックBにある内容は同じだけれど簡略化して記入した文字列に対してFindメソッドをもちいてブックBの任意の行番号を取得する動作をさせていました。
動作自体を作るのは問題なかったのですが、まったく期待する文字列を検索してくれずに困っていました。
例えばブックAに山田太郎(abc商事)とありブックBは山田太郎だったとすると山田太郎が一致しているからxlPart条件でいけると思っていたのです。しかし、結果はブックBにも山田太郎(abc商事)と入っていなければ検索が成功しなかったのです???
当初はそのようなことを疑っていなかったので、動かない状態が1週間続きこちらで困りに困って質問させていただきましたが結局コード自体には問題がないことになり回答してくださった方には大変申し訳なく思っております。
結局、xlPartとはどうった動作なのでしょうか?わけがわかりません。
No.5ベストアンサー
- 回答日時:
ご質問の趣旨を取り違えていましたらすみません。
>ブックAにある文字列でブックBにある内容は同じだけれど簡略化して記入した文字列に対して
>FindメソッドをもちいてブックBの任意の行番号を取得する
>例えばブックAに山田太郎(abc商事)とありブックBは山田太郎だったとすると
もしかして、
ブックAにある文字列(ex."山田太郎(abc商事)")を検索キーとして、
ブックBについて部分一致検索で検索し、
ブックBにある文字列(ex."山田太郎")を探したい
ということでしょうか?
であれば「部分一致検索」という処理について誤解があるように思います。
FindメソッドのxlPartという指定は、#1さんのおっしゃるとおり「部分一致検索」の指定ですが、
この場合の(そしておそらく一般に)「部分一致検索」というのは、
検索対象の文字列群のうち、検索キー【を含む】文字列を探すという意味です。
したがって、検索キー【に含まれる】文字列はヒットしません。
"山田太郎"をキーとして部分一致検索すれば、"山田太郎(abc商事)"はヒットしますが、
"山田太郎(abc商事)"をキーとして部分一致検索しても、"山田太郎"はヒットしません。
-----------------------------------------------------------------------------
というわけで、もし上述のような動作を期待しておられるのであれば、
部分一致検索では実現できません。
・"山田太郎(abc商事)"から文字列操作で"("の直前まで"山田太郎"を切り出して、それをキーに検索する。
あるいは、
・ブックBのセル全体を回して、InStr関数等で個別に評価する
といったアプローチが必要になるのではないかと思います。
以上ご参考まで。
ご指摘どおりの解釈をしておりました。
細かい設定は文字列操作などをしてやらないと、山田太郎(abc商事)をひとつのくくりにしてしまうわけですね。
楽をしようと考えて、プログラムを使う側の感覚でいた自分を反省します。今私は組む側でした。
No.4
- 回答日時:
多分これで。
。(まだ動揺中)レスの無駄消費申し訳ない。
Sub sample()
Dim wb As Workbook
Dim sh As Worksheet
Dim rSearch As Range
Dim r As Range
Dim sKeyword As String
Dim sFirst As String
sKeyword = "山田太郎"
For Each wb In Workbooks
For Each sh In wb.Worksheets
Set rSearch = sh.Cells
Set r = rSearch.Find(What:=sKeyword, _
LookIn:=xlValues, _
LookAt:=xlPart)
If Not r Is Nothing Then
sFirst = r.Address
Do
Debug.Print wb.Name & vbTab;
Debug.Print sh.Name & vbTab;
Debug.Print r.Address & vbTab;
Debug.Print r.Value
Debug.Print "---------------------------------"
Set r = rSearch.FindNext(r)
Loop While Not r Is Nothing And r.Address <> sFirst
End If
Next sh
Next wb
Set rSearch = Nothing
Set rFirst = Nothing
End Sub
ご返答ありがとうございます。
確かに、前回の質問内容へのリンクを張らなかったのはマナー不足だったかもしれません。個人的には、コードを書き直すことよりもxlPart自体の動きを把握したく思っていたもので(^^;)
提示していただいたコードをリンク先にあった内容に合うよう書き直してはめ込んでみましたがやはり現象としては同じで、キーワードを探すことができていないようです。恐らく今回の私の動作に対する認識の肝はNo5さんの指摘にあるような気がします。
しかしながら、For Eachを組み込むことで動作が速くなりました。コードの長さがそんなないものでもコレクション化するとだいぶ違うものですね。勉強になりました。
No.2
- 回答日時:
#1 です。
ごめんなさい。寝ぼけて適当なことを書いてしまいました。参照先がころころ変わるのにオブジェクトの比較じゃ、ダメですよねー。。
ということで、下記に訂正いたします。
Sub sample()
Dim wb As Workbook
Dim sh As Worksheet
Dim rSearch As Range
Dim r As Range
Dim sKeyword As String
Dim rFirst As Range
sKeyword = "山田太郎"
For Each wb In Workbooks
For Each sh In wb.Worksheets
Set rSearch = sh.Range("A1:E1000")
Set r = rSearch.Find(What:=sKeyword, _
LookIn:=xlValues, _
LookAt:=xlWhole)
If Not r Is Nothing Then
sFirst = r.Address
Do
Debug.Print wb.Name & vbTab;
Debug.Print sh.Name & vbTab;
Debug.Print r.Address & vbTab;
Debug.Print r.Value
Debug.Print "---------------------------------"
Set r = rSearch.FindNext(r)
Loop Until Not r Is Nothing And r.Address <> s
End If
Next sh
Next wb
Set rSearch = Nothing
Set rFirst = Nothing
End Sub
No.1
- 回答日時:
こんにちは。
前スレへのリンクもなく、ソースも掲載なしでは不親切では?
回答者は前スレを探すとこから始めることになってしまいますよ。
http://oshiete1.goo.ne.jp/qa4416154.html
> xlPartとはどうった動作なのでしょうか?
Find メソッドの検索パラメータ LookAt に指定する定数 xlPart の
ことでしたら、部分一致検索を指定していることになります。
全てのブック・シートで検索するなら、下記を試してみて下さい。
結果は、イミディエイトウインドウに表示します。VBE 画面で
Ctrl + G キーで表示します。
小規模テストしかしてませんが、問題なく全て部分一致検索できて
ます。
Sub sample()
Dim wb As Workbook
Dim sh As Worksheet
Dim rSearch As Range
Dim r As Range
Dim sKeyword As String
Dim rFirst As Range
sKeyword = "山田太郎"
For Each wb In Workbooks
For Each sh In wb.Worksheets
Set rSearch = sh.Cells
Set r = rSearch.Find(What:=sKeyword, _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchByte:=True)
If Not r Is Nothing Then
Set rFirst = r
Do
Debug.Print wb.Name & vbTab;
Debug.Print sh.Name & vbTab;
Debug.Print r.Address & vbTab;
Debug.Print r.Value
Debug.Print "---------------------------------"
Set r = rSearch.FindNext(r)
Loop Until Not r Is Nothing Or r Is rFirst
End If
Next sh
Next wb
Set rSearch = Nothing
Set rFirst = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜ、将棋の藤井7冠は、地位も...
-
野球選手にインスタでDM送った...
-
気付?方?内?
-
好きな野球選手にファンレター...
-
氏名(フリガナ)
-
野球選手にDM送っていたら、 い...
-
プロ野球選手やプロサッカー選...
-
ホークスファン歴10年です。...
-
居候している場合、郵便物等は...
-
WBCを観戦し思った事ですが、あ...
-
臨時代走
-
一塁でレッグガードを外す時の...
-
京セラドームで稲葉ジャンプ
-
BIG BOSS
-
カズの指定席
-
メジャーリーガーのパフォーマンス
-
外人野球選手がよく吐いてるの...
-
福留孝介選手は在日韓国人ですか?
-
親の承諾書の書き方
-
プロ野球選手は180cm公弥が多い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、将棋の藤井7冠は、地位も...
-
ダメ男松井秀喜は復活できますか?
-
大谷選手がドーピング?
-
気付?方?内?
-
居候している場合、郵便物等は...
-
プロ野球選手やプロサッカー選...
-
氏名(フリガナ)
-
野球選手にインスタでDM送った...
-
好きな野球選手にファンレター...
-
プロ野球選手。首都圏の遠征(...
-
長嶋茂男の口癖、いわゆるひと...
-
本人転居で、同じ姓(実家)に...
-
野球選手にDM送っていたら、 い...
-
出席して頂いた方への礼状
-
グーグルフォトの各画像に名前...
-
ファンレターについてです!
-
女性が男性のことをフルネーム...
-
VBA 半角スペースを入れるには...
-
WBCを観戦し思った事ですが、あ...
-
野球選手にインスタのDM送ると...
おすすめ情報