Excel VBA 特定の数値のセルをすべて選択する

スポンサーリンク
スポンサーリンク

特定の数値のセルをすべて選択する方法

何らかの条件に合致するセルを探す方法は「検索」コマンドに相当するRange【レンジ】オブジェクトのFind【ファインド】メソッドを使用する方法や「フィルター」コマンドに相当するRange【レンジ】オブジェクトのAutoFilter【オートフィルタ-】メソッドを使用する方法が
考えられますが、「検索」コマンドのFind【ファインド】メソッドは、文字列を検索するコマンドで、セルの値が「数値」の場合は検索できません。

「フィルター」コマンドのAutoFilter【オートフィルター】メソッドはデータベース形式の表から特定のレコード(行)を検索する場合に適しています。

セルの数値の値を検索して選択する場合は、For Each Next【フォーイーチネクスト】ステートメントを使用して繰り返しSpecialCells【スペシャルセルズ】メソッドで選択した数値が入力されている各セルに対してIf【イフ】ステートメントで条件分岐をして条件に一致したセルをUnion【ユニオン】メソッドでまとめて選択する方法が考えられます。

任意の数値のセルを選択する実行例

任意の数値のセルを選択するコード例

Sub 数値選択()
Dim 範囲 As Range
Dim 個数 As Long
Dim 検索値 As Variant
On Error GoTo エラー処理
Cells.SpecialCells(xlCellTypeConstants, xlNumbers).Select
個数 = 0
検索値 = Application.InputBox("検索数値を入力してください。", Type:=1)
Application.ScreenUpdating = False
For Each 範囲 In Selection
If Val(範囲.Value) = 検索値 Then
個数 = 個数 + 1
If 個数 = 1 Then
範囲.Select
Else
Union(Selection, 範囲).Select
End If
End If
Next 範囲
Application.ScreenUpdating = True
If 個数 = 0 Then
ActiveCell.Select
MsgBox "該当する値はありません。"
Else
  MsgBox 検索値 & "のセルは" & 個数 & "個あります。"
End If
Exit Sub
エラー処理:
MsgBox "値が数値のセルはありません。"
End Sub

コードの解説

2行目【Dim 範囲 As Range】
数値が入力されているセルを格納する変数「範囲」をオブジェクト型の(Range)で宣言します。


3行目【Dim 個数 As Long】
条件に一致したセルの個数を格納する変数「個数」を長整数型の(Long)で宣言します。


4行目【Dim 検索値 As Long】
InputBox【インプットボックス】メソッドでユーザーから受け取った選択する値を格納する変数「検索値」を長整数型の(Long)で宣言します。


5行目【On Error GoTo エラー処理】
次の処理で、Range【レンジ】オブジェクトのSpecialCells【スペシャルセルズ】メソッドを使用して値が数値のセルを選択しますが,値が数値のセルが無い場合、エラーが発生してデバックモードでプロシージャが中断してしまうのでOnError【オンエラー】ステートメントとGoTo【ゴートゥ】ステートメントを使用して「エラー処理」ラベルまで処理をジャンプさせます。


6行目【Cells.SpecialCells(xlCellTypeConstants, xlNumbers).Select】
Cells【セルズ】プロパティで、アクティブシートのすべてセルを参照してRange【レンジ】オブジェクトのSpecialCells【スペシャルセルズ】メソッドを使用し、値が数値のセルを参照して、Range【レンジ】オブジェクトのSelect【セレクト】メソッドでそのセルを選択します。


7行目【個数 = 0】
選択されているセルの数を格納する変数「個数」に0を代入します。


8行目【検索値 = Application.InputBox(“検索数値を入力してください。”, Type:=1)】
Application【アプリケーション】オブジェクトのInputBox【インプットボックス】メソッドを使用して、ユーザーから検索値を受け取り変数「検索値」に代入します。


9行目【Application.ScreenUpdating = False】
Application【アプリケーション】オブジェクトのScreenUpdating【スクリーンアップデーティング】プロパティを使用して、画面の更新を抑制し、次の繰り返し処理の高速化を図ります。


10行目【For Each 範囲 In Selection】
For Each Next【フォーイーチネクスト】ストートメントを使用して繰り返し処理を実行します。
オブジェクト変数「範囲」に選択されている値が数値のセルを順次代入し、値が数値のセルの個数分繰り返し処理が実行されます。


11行目【If Val(範囲.Value) = 検索値 Then】
繰り返し処理の中でIf【イフ】ステートメントを使用して、条件分岐を実行します。文字列を数値に変換するVal【バル】関数を使用して、オブジェクト変数「範囲」に代入されている値を数値に変換し、ユーザーから受け取った検索値が代入されている変数「検索値」を比較演算子の「=」で等しい場合を定義します。

比較演算子を変更することで、検索値以上や以下、等しくないなどの検索条件を変えることができます。


12行目【個数 = 個数 + 1】
上記の条件分岐で条件が成立した場合、 つまり検索値とセルの値が合致した場合、検索値と合致したセルの数を代入する変数「個数」に1を加算します。


13行目【If 個数 = 1 Then】
更にIf【イフ】ステートメントで条件分岐をします。条件に合致したセルの数が格納されている
変数「個数」が1の場合 つまり最初に検索値に合致する値のセルがあった場合を定義します。


14行目【範囲.Select】
上記の条件分岐が成立した場合、 つまり最初に検索値に合致する値のセルがあった場合、
そのセルが格納されている変数「範囲」をSelect【セレクト】メソッドで選択します。


15行目【Else】
Else【エルス】ステートメントを使用して、上記の条件分岐が成立しなかった場合、つまり
検索値に合致するセルが最初に見つかったセルで無い場合を定義します。


16行目【Union(Selection, 範囲).Select】
検索値に合致するセルが最初にみつかったセルで無い場合、Application【アプリケーション】オブジェクトの複数のセルやセル範囲を参照するUnion【ユニオン】メソッドを使用して、繰り返し処理の中で、次々に検索値に合致するセルをSelect【セレクト】メソッドで選択していきます。


19行目【Next 範囲】
10行目からここまでの値が数値のセルの数分、処理が繰り返しされます。


20行目【Application.ScreenUpdating = True】
繰り返し処理が終了したので、止めていた画面の更新を再開します。


21行目【If 個数 = 0 Then】
条件分岐で検索値と値が合致するセルが無い場合を定義します。


22行目【ActiveCell.Select】
上記の条件が成立した場合、アクティブセルを選択します。


23行目【MsgBox “該当する値はありません。”】
上記の条件が成立した場合、MsgBox関数を使用して、ユーザーに検索値に合致するセルが無いことを伝えます。


24行目~25行目【Else
MsgBox 検索値 & “のセルは” & 個数 & “個あります。”】

Else【エルス】ステートメントを使用して、上記条件に合致しない場合、つまり検索値に合致するセルが1個以上あった場合に、MsgBox関数を使用してユーザーに変数「検索値」に格納されている検索値と変数「個数」に格納されている検索値に合致したセルの数を伝えます。


28行目~29行目【エラー処理:
MsgBox “値が数値のセルはありません。”】
エラーが発生した場合のエラー処理です。

ユーザーにMsgBox関数で値が数値のセルが存在しないことを伝えます。


以上で、特定の数値のセルをすべて選択する方法についての解説を終了します。ありがとうございました。

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク