トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 次なるイノベーション編: 第10話「リストを正しく設定しよう!」3/4 :部分一致と完全一致

やってみよう!Excel VBAで業務改善! 次なるイノベーション編|第10話 「リストを正しく設定しよう!」

部分一致と完全一致

「これ見てください。
リスト設定シートのC列に"担当者"、D列に"担当"という項目名のリストがあるとします。
LookAtの指定が部分一致の場合、引数のListNameの値が"担当"なら、
部分一致するC列をリストに設定しちゃいます。
完全一致が指定されていれば、正しくD列をリストの範囲に設定しますよ」
泉先輩は、グウと声を漏らしました。

「ああ…、こんなケース…確かにありえるわ。
項目名は似たようなのが多いから…。
LookAt引数の指定がない場合、どちらの検索条件になるんです?」
「そのときは、前回に検索で使用した設定値が使用されます。
これは、マクロでなく手作業で検索したときの値も引き継がれますから、
ユーザーによってマチマチになりますね。
リストの項目名のように一対一で対応する値を検索するときは、
"LookAt:=xlWhole"と、明示的に指定することをおすすめします」
「ああ…そのとおりね!
これ、知ってるのと知らないのでは大違いだわ。
だって、ユーザーの操作によって結果が変わるのなら、
ある日突然、正しくリストが設定できないって不具合が出て、次の日にはなぜか直ってました…っていう、
謎のエラーになっちゃうわ」
八木くんの眉がピクンと動きます。

「(この人…、星と一緒でいい開発センス持ってるなあ…)
はい、そのとおりです。
ユーザーの操作によって結果が変わるので、原因を突き止めにくいエラーになってしまいますね。
……ちなみにFindメソッドには引数がたくさんあるので、
指定するときはこんなふうに、名前付き引数で指定するとよいでしょう」

    With Worksheets("リスト設定")
        If ListName <> "" Then
            Set o = .Rows(1).Find(ListName, LookAt:=xlWhole)

カタカタと八木くんが、軽快にコードを打ち込みます。
自分の作ったコードが、どんどんと完成されたものになっていく小気味よさを、
泉先輩は全身で感じていました。

一覧にもどる