…続きを読む" />
講師コラム

Excel VBA小技コラム – セルの検索

  • このエントリーをはてなブックマークに追加

表計算ソフトのExcelは非常に便利なソフトですね。数字の計算からグラフ・抽出まで簡単な操作で出来ます。こんな便利なソフトですが、複雑な計算をさせたり、多くの条件で分けて計算をする際には、さすがに標準の数式では限界があります。
その限界を突破するためにあるのが、VBA(Visual Basic for Application)です。平たく言ってしまうとExcelで行うプログラミングです。
そう言ってしまうと構えてしまう方も多いかもしれませんが、実際にやってみるとコツをつかめば心強い機能になります。

このコラムでは、よく使うコードを紹介していきたいと思います。

紹介するコードは下記環境で動作確認をしておりますので、あらかじめご了承ください。
OS:Windows7 および Windows10
Officeバージョン:MicrosoftOffice2013 および 2016

今回紹介するのは「セルの検索」です。

早速、コードを見てみましょう。

Sub sample()

‘①変数宣言
Dim find_str As String, obj As Range
‘②変数に初期値を代入
find_str = “検索文字”
‘③検索の範囲を設定

With Range(Cells(1, 1), Cells(5, 5))

‘④セルの検索
Set obj = .Find(find_str, LookAt:=xlWhole)
If obj Is Nothing Then
MsgBox (find_str & “に該当なし”)
Else
obj.Select
End If
‘⑤変数の初期化
Set obj = Nothing

End With

End Sub

このコードでは検索を行った文字を含む1つ目のセルを選択します。
順番に実行する内容を見てみましょう。

‘①変数宣言
Dim find_str As String, obj As Range

ここでは変数の宣言を行っているのみです。
注意点としては、検索結果のセル情報を受け取る変数のデータ型に、「Range」のオブジェクト型を設定している点です。今回はセルの検索なので、「Range」を設定します。

‘②変数に初期値を代入
find_str = “検索文字”

ここでは検索文字を格納する「find_str」に検索をする情報を設定します。
直接文字列を代入していますが、セルを指定したり、inputボックスを利用するなど、変更しても構いません。

‘③検索の範囲を設定
With Range(Cells(1, 1), Cells(5, 5))
・・・
End With

ここで利用する「With」はオブジェクト情報の記述を省略する為に使用します。
今回のコードの流れからみると、検索の範囲指定として利用するイメージです。
どこで利用しているかは後ほどご説明します。

‘④セルの検索
Set obj = .Find(find_str, LookAt:=xlWhole)
If obj Is Nothing Then
MsgBox (find_str & “に該当なし”)
Else
obj.Select
End If

ここで検索の実行と、結果から条件分岐をしています。

Set obj = .Find(find_str, LookAt:=xlWhole)

左辺から見てみましょう。
オブジェクト型の変数に値を代入しますので、「Set」を先頭に記述します。
右辺で検索を実行しています。
ここで先ほどの「With」で指定したセルの範囲が利用されます。
「.Find(・・・)」とすることで、「Range(Cells(1, 1), Cells(5, 5)) .Find(・・・)」と同じ効果になります。今回のコードでは1か所のみの記述ですので影響は小さいですが、複数個所に記述する場合には、読み間違いや修正漏れを防ぐためにも利用したいところです。

次に検索結果を利用する為の準備をします。
Findメソッドは、条件に概要する結果が見つかった場合には、そのセルのRangeオブジェクトを返します。もし見つからなかった場合には「Nothing」という値を返します。
なので、見つかったかどうかをIf構文で振り分け、見つかった場合にのみ目的のコードが実行されるようにする必要があります。

If obj Is Nothing Then
MsgBox (find_str & “に該当なし”)
Else
obj.Select
End If

上記のように、If構文の判定式に「obj Is Nothing」とすることで、見つからなかった場合のコードを記述することができ、Elseで見つかった場合のコードを記述することで振り分けられます。

‘⑤変数の初期化
Set obj = Nothing

ここではobjの変数を初期化しています。オブジェクト型の変数はそのまま放って他のコードを実行していると、動作が重くなることがあります。オブジェクト型では特に、不要になったら初期化する癖をつけましょう。

今回も少し長くなりましたが、いかがでしたでしょうか。
次回は複数の検索結果の取得をするコードを紹介したいと思います。

  • このエントリーをはてなブックマークに追加

話題をチェック!

デジタル時代に大切なアナログ

いまや世界中がすっかりデジタルの世界。パソコンはもちろん電話から家電からIoTの表すとおり デジタルにかかわりのない存在は皆無と言ってもいいかもしれません。 昨今は「10年後にAI(人口知能)に仕事を奪われる」「10年後 …続きを読む

「真似して」「学ぶ」スタイル

新入社員の皆さまも、もうだいぶ職場になれたころでしょうか?もしかしたら、職場にとけ込むことが、精一杯で、まだまだ自分ひとりでは業務を遂行することが難しいという方の方が多いかもしれません。 正直なところ、新入社員に対して  …続きを読む