2017-06-21 12 views
1

2枚のデータを比較しています。このコードでは、他の部分だけが実行され、r1.valueを使用すると、型不一致エラーがスローされます。 改善を提案してください。その値が配列であるので、Excel VBA - シートデータの比較

Sub compareData() 
Dim r As Range 
Dim r1 As Range 
Dim r2 As Range 

    With Worksheets("Sheet1") 
     Set r1 = Intersect(.Range("A:A"), .UsedRange) 
    End With 
    With Worksheets("Sheet2") 
     Set r2 = Intersect(.Range("A:A"), .UsedRange) 
    End With 

    For Each r In r2 
     If r1.Text <> r2.Text Then 
      r.Offset(0, 4).Value = "Closed" 
      Else 
      r.Offset(0, 4).Value = 1 
     End If 
    Next r 
End Sub 

おかげ

答えて

0

r1多くの細胞の範囲は次のとおりです。 はここに私のコードです。 rは単一のセルであるため、その値は単一のバリアントです。配列を1つのバリアントと比較することはできません。したがって、型の不一致です。

あなたはそれがR1内に存在する場合、このテストは、それを達成することができますr2に各テキストをチェックしようとしている場合:

For Each r In r2 
    If Application.CountIf(r1, r.Text) = 0 Then 
     r.Offset(0, 4).Value = "Closed" 
    Else 
     r.Offset(0, 4).Value = 1 
    End If 
Next r 

あなたは上の平等のための2つの列を比較したい場合は同じ位置であれば、次のようなループでこれを行うことができます:

Dim i as Long 
For i = 1 to r2.rows.Count 
    If r2.Cells(i, 1).Value2 = r1.Cells(i, 1).Value2 Then 
     r2.Cells(i, 4).Value = "Closed" 
    Else 
     r2.Cells(i, 4).Value = 1 
    End If 
Next i 
+0

ありがとうございました! – SagarDixit

+0

ありがとうございました...!コードは絶対にうまく動作しています。それでも、配列の値を比較する他の方法を探しています。このような 'Range'値を比較する他の方法はありますか? – SagarDixit

+0

@ user3130361答えに追加されたセクションを参照してください。 –