![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
困っているというわけではないのですが、ヘルプなどを見ても特に詳しいことに触れてないのでお世話になりたいと思います。
つい数日前までブック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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(Microsoft Office) Outlookメール 連絡先の検索について 〈 ご説明 〉 Windows PC の Outlook 1 2022/09/23 14:43
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
居候している場合、郵便物等は...
-
好きな野球選手にファンレター...
-
気付?方?内?
-
氏名(フリガナ)
-
野球選手にインスタでDM送った...
-
親の承諾書の書き方
-
出席して頂いた方への礼状
-
1軍にいる選手でベンチ入りし...
-
クレジットカードの「姓」と「名」
-
赤星選手が歌っていた2003...
-
福留孝介選手は在日韓国人ですか?
-
広島カープ九里選手を九里亜蓮...
-
本人転居で、同じ姓(実家)に...
-
ファンレターについてです!
-
VBA 半角スペースを入れるには...
-
動画のクレジット表記を英語で...
-
野球でのホームスチールは成功...
-
大谷選手は突然変異ですか?
-
文字間の空白の削除を教えてく...
-
育成選手と2軍選手の違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
気付?方?内?
-
居候している場合、郵便物等は...
-
好きな野球選手にファンレター...
-
氏名(フリガナ)
-
野球選手にインスタでDM送った...
-
在日朝鮮人選手
-
出席して頂いた方への礼状
-
千葉ロッテマリーンズ 背番号2...
-
出ている学校の偏差値とか学歴...
-
クレジットカードの「姓」と「名」
-
女性が男性のことをフルネーム...
-
VBA 半角スペースを入れるには...
-
動画のクレジット表記を英語で...
-
本人転居で、同じ姓(実家)に...
-
育成選手と2軍選手の違い
-
赤星選手が歌っていた2003...
-
1軍にいる選手でベンチ入りし...
-
福留孝介選手は在日韓国人ですか?
-
長嶋茂男の口癖、いわゆるひと...
-
親の承諾書の書き方
おすすめ情報