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関数で
値が数値のセルが存在しないことを伝えます。


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

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

フォローする

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