月別アーカイブ: 2022年6月

Excel VBA Findメソッドを結合されたセルに使うときは要注意!

タイトルについて、結合されたセルにFindメソッドを使用したところうまくいかなかったので、そのときの対応方法について備忘録を残します。

1つ目が検索対象となっており、そのセルが結合されていると、Find関数は意図したとおりに機能しません

図1 非結合セル

図1 のシートに対して下記コード(Code1)を動作させると図2が表れます。
これは自然です。

'Code1
Sub test()
    MsgBox Range(Cells(1, 1), Cells(3, 1)).Find("a").Value
End Sub
図2 非結合セルに対するFindの結果

次に図3のように1行目のセルを2行目と結合させて、同様にCode1を動作させてみます。すると図4のようにうまく動作してくれません。私としては、”a”が入力された結合されたセルの値を出力して欲しいのですが、残念ながらそうはならないのです。

図3 結合セル
図4結合セルに対してCode1を実行した結果

対応策

対応策は次の2つがあるかと思われます。

1.検索範囲の1行目のセルの上に空白のセル、もしくはFindにより検索されないであろうセルを用意し、本来の検索範囲よりも1行上から検索範囲とする。
※この現象は私が試す限り、1行目のセルが結合されており、なおかつそのセルが検索する対象となっている場合にのみ発生するようです。ですので、本来の1行目を2行目に意図的にずらすことによって所望の動作をするように工夫することが対応策の1つです。

2.セルの結合を解除する。
※1より単純でもしかしたら間違いの少ない対応策です。

終わりに

VBAを触っていてもやっとしたので記事にしました。
このような動作をする原因は、「セルの結合を想定していないからこのような処理にが行われる。」としか私には思いつきませんでした。

もしお詳しいかたがいらっしゃいましたら、理由やスマートな改善方法をご教授いただけましたら幸いです。

最後まで読んでいただきありがとうございました。