目次

目的

  • 値が違うセルを見つける。
  • 結果をセル範囲で取得する。
  • 大文字、小文字は区別出来なくても良い。

目次まで戻る

その一例

  1. 下記の状態でテストしてみます。
    a , b , c
    a , b , c
  2. 下記マクロを実行してみます。値が「a」ではないセルを選択してみます。
    Sub A1と値が違うセルを選択()
    Dim a As Range
    Set a = Range("A1:C1").RowDifferences(Range("A1"))
    a.Select
    End Sub
    1. 変数 a にセル範囲を代入する予定なので Range で宣言。
    2. セル範囲はオブジェクトなので Set で代入。
    3. 検索対象.RowDifferences(検索キーワード) の書式。
  3. 値が違うセルが選択されました。
    b , c が選択されている。
    b , c が選択されている。
    1. 値が違うセルがない場合はエラーが発生しました。
      実行時エラー '1004' 該当するセルが見つかりません。
      実行時エラー '1004' 該当するセルが見つかりません。
      エラー発生行。
      エラー発生行。

      下記のようなエラー処理を考えてみました。

      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
  4. 検索対象に大文字 A,B,C を追加して、下記マクロを実行してみます。
    a , 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
    1. Rows(1) で一行目全体を検索。
  5. 結果は以下のようになりました。
    大文字の A は選択されていない。
    大文字の A は選択されていない。
    1. 「Option Compare Binary」を追加しても同じ結果になりました。
      バイナリモードで文字列比較。
      バイナリモードで文字列比較。
  6. 取得したセルをループしてみます。
    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
    1. On Error Resume Next
      エラー発生時、次の行から処理を継続する設定。
    2. If Err.Number = 0 Then
      マクロ実行直後は 0。ここまでエラーがなかった場合、0 のまま。
    3. Spc(1)
      Debug.Print の中でスペースを出力する関数。「b.Address Spc(1) b.Value」とスペースで区切って次の行に移動すると、「b.Address; Spc(1); b.Value」とセミコロン「;」が自動で挿入されました。
    4. On Error GoTo 0
      コメントを外すと「On Error Resume Next」が無効になる。エラー発生が再開される。
  7. イミディエイトウィンドウへの出力結果。
    $B$1 b
$C$1 c
$E$1 B
$F$1 C
    $B$1 b
    $C$1 c
    $E$1 B
    $F$1 C
    1. On Error GoTo 0
      Debug.Print Range("xxxxxx1").Address
      のコメントを外すとエラーの発生を再開?できました。
      実行時エラー '1004'
'Range'メソッドは失敗しました。'_Global'オブジェクト
      実行時エラー '1004'
      'Range'メソッドは失敗しました。'_Global'オブジェクト
      エラー発生行。
      エラー発生行。

マクロストック

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

以上、閲覧ありがとうございました。

 

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿