1/99スタックエンジニアの適当記録

適当なことを書きます。関西で転職したいです。

VBAのFINDでなぜか最初のセルがスキップされている問題についての解決策

VBAのFINDでなぜか最初のセルがスキップされる

先日VBAを仕事書いていたところ、find関数でなぜか最初のセルがスキップされてしまいました。
実際に再現してみるとこんな感じです。

Sub main()

    MsgBox (Range(Cells(1, 2), Cells(10, 2)).Find("テスト").Row)

End Sub

f:id:roku28632:20200201134249p:plain

本当は1が表示されるはずですが、2になっているので、一行目のテストがスキップされています。

原因

Range.Findメソッドは、引数のAfterが指定されていないと、指定範囲の最初の「次のセルから」検索される仕様だからです。

対処

原因がわかってしまえば、対処は簡単です。
afterを「最後に」指定します。
afterは「指定したセルの次のセルから検索する」引数なので、最後を指定することで、
最後の次の最初が検索対象になります。

実際にやってみる

Sub main()

    MsgBox (Range(Cells(1, 2), Cells(10, 2)).Find("テスト", after:=Cells(10, 2)).Row)

End Sub

f:id:roku28632:20200201134325p:plain

まとめ

findを利用するときには、afterの引数を指定しまっしょう。