目次
目的
- 値が違うセルを見つける。
- 結果をセル範囲で取得する。
- 大文字、小文字は区別出来なくても良い。
その一例
- 下記の状態でテストしてみます。
a , b , c - 下記マクロを実行してみます。値が「a」ではないセルを選択してみます。
Sub A1と値が違うセルを選択()
Dim a As Range
Set a = Range("A1:C1").RowDifferences(Range("A1"))
a.Select
End Sub- 変数 a にセル範囲を代入する予定なので Range で宣言。
- セル範囲はオブジェクトなので Set で代入。
- 検索対象.RowDifferences(検索キーワード) の書式。
- 値が違うセルが選択されました。
b , c が選択されている。 - 検索対象に大文字 A,B,C を追加して、下記マクロを実行してみます。
a , b , c , A , B , C Sub 行全体検索_A1と値が違うセルを選択()
Dim a As Range
Set a = Rows(1).RowDifferences(Range("A1"))
a.Select
End Sub- Rows(1) で一行目全体を検索。
- 結果は以下のようになりました。
大文字の A は選択されていない。 - 取得したセルをループしてみます。
Sub 取得したセルをループ()
Dim a As Range
Set a = Rows(1).RowDifferences(Range("A1"))
a.Select
On Error Resume Next
If Err.Number = 0 Then
Dim b As Range
For Each b In a
Debug.Print b.Address; Spc(1); b.Value
Next
Else
MsgBox "エラー発生"
End If
'On Error GoTo 0
'Debug.Print Range("xxxxxx1").Address 'エラー発生
End Sub- On Error Resume Next
エラー発生時、次の行から処理を継続する設定。 - If Err.Number = 0 Then
マクロ実行直後は 0。ここまでエラーがなかった場合、0 のまま。 - Spc(1)
Debug.Print の中でスペースを出力する関数。「b.Address Spc(1) b.Value」とスペースで区切って次の行に移動すると、「b.Address; Spc(1); b.Value」とセミコロン「;」が自動で挿入されました。 - On Error GoTo 0
コメントを外すと「On Error Resume Next」が無効になる。エラー発生が再開される。
- On Error Resume Next
- イミディエイトウィンドウへの出力結果。
$B$1 b
$C$1 c
$E$1 B
$F$1 C
マクロストック
ColumnDifferences というメソッドもあるようです。
Sub 列方向_A1と値が違うセルを選択()
Dim a As Range
Set a = Columns("A").ColumnDifferences(Range("A1"))
a.Select
End Sub

テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。