目次
目的
- 値が違うセルを見つける。
- 結果をセル範囲で取得する。
- 大文字、小文字は区別出来なくても良い。
その一例
- 下記の状態でテストしてみます。
- 下記マクロを実行してみます。値が「a」ではないセルを選択してみます。
Sub A1と値が違うセルを選択()
Dim a As Range
Set a = Range("A1:C1").RowDifferences(Range("A1"))
a.Select
End Sub- 変数 a にセル範囲を代入する予定なので Range で宣言。
- セル範囲はオブジェクトなので Set で代入。
- 検索対象.RowDifferences(検索キーワード) の書式。
- 値が違うセルが選択されました。
- 値が違うセルがない場合はエラーが発生しました。
下記のようなエラー処理を考えてみました。
Sub エラー処理追加_A1と値が違うセルを選択()
Dim a As Range
On Error Resume Next
Set a = Range("A1:C1").RowDifferences(Range("A1"))
If Err.Number = 0 Then
a.Select
Else
MsgBox "エラー発生"
End If
End Sub
- 値が違うセルがない場合はエラーが発生しました。
- 検索対象に大文字 A,B,C を追加して、下記マクロを実行してみます。
Sub 行全体検索_A1と値が違うセルを選択()
Dim a As Range
Set a = Rows(1).RowDifferences(Range("A1"))
a.Select
End Sub- Rows(1) で一行目全体を検索。
- 結果は以下のようになりました。
- 「Option Compare Binary」を追加しても同じ結果になりました。
- 「Option Compare Binary」を追加しても同じ結果になりました。
- 取得したセルをループしてみます。
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
- イミディエイトウィンドウへの出力結果。
- On Error GoTo 0
Debug.Print Range("xxxxxx1").Address
のコメントを外すとエラーの発生を再開?できました。
- On Error GoTo 0
マクロストック
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
以上、閲覧ありがとうございました。