【エクセル マクロ VBA】指定の文字列を検索してそのセルの位置を取得する

資料請求番号:SH44

Findメソッドを使用して指定の文字列の行番号・列番号を取得する

膨大な数のデータの中からある特定の文字列を検索して、その文字列が存在するセル位置を取得する方法の備忘録です。

課題

マクロを使用して、次の表の中から「粘度」という文字が存在するセル位置(行番号・列番号)を取得せよ。

解決のアプローチ

条件に当てはまるセルを検索する「Findメソッド」を使用します。
Findメソッドについて、詳しくはこちら
エクセルの神髄 第98回Findメソッド

この関数は色々な引数を取りますが、Whatさえ指定してしまえば使用可能です。

今回の課題ではA3セル~A19セルに渡って検索し、その中で”粘度”という文字列を見つけたらその行番号、列番号を取得する

という考え方でマクロを書きます。

マクロ

基本形

「マクロを書きます」と言っても、今回のマクロは以下のたった一行です。

MsgBox Range(Cells(3, 1), Cells(19, 1)).Find(“粘度”).Row

このマクロはA3セル(=3行1列)からA19セル(=19行1列)に渡って”粘度”という文字列を検索し、その行の値をメッセージボックスに出力せよ。

という内容です。

このマクロを実行すれば

このような結果が得られます。確かに「粘度」は11行目にありますね。

もちろん、RowをColumnとすることで列番号を取得することも可能です。この場合、解は「1」しかないことが明白ですが。

検索したい文字列を参照して検索する

上記のマクロは検索したい文字列が変化すればマクロを組みなおさなければいけず、
応用の範囲は非常に狭くなってしまいます。
したがって以下のように書き直すと良いでしょう。

MsgBox Range(Cells(3, 1), Cells(19, 1)).Find(What:=Cells(3, 15).Value).Row

「”粘度”」を「What:=Cells(3, 15).Value」と書き換えました。これにより3行15列(=O3セル)に書いてある文字列をA3セル(=3行1列)からA19セル(=19行1列)に渡って検索せよ。

という内容に変わります。

実行すれば

先ほどと同じ解が得られます。

応用

もちろん、メッセージボックスを出すだけでは、全く使い物になりません。

r_num = Range(Cells(3, 1), Cells(19, 1)).Find(What:=Cells(3, 15).Value).Row

と書き換えることにより、先ほど得られた解「11」をr_numという変数に格納することができます。変数に格納するという作業さえできればあらゆることができるようになります。

応用課題

マクロを使用して、次の表の中から「粘度」「比熱」「密度」という文字が存在するセルの行番号を取得し、P列(16列)に出力せよ。

応用課題 回答

For i = 3 To 5
r_num = Range(Cells(3, 1), Cells(19, 1)).Find(What:=Cells(i, 15).Value).Row
Cells(i, 16) = r_num
Next i


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です