2013-07-25 6 views
1
Sub compareRange() 
     If Worksheets("Sheet1").Range("A14:C14") = Worksheets("Sheet1").Range("A15:C15") Then 
      MsgBox "Two Ranges are the same" 
     End If 
     'MsgBox "Two Ranges are the same" 
    End Sub 

Предоставление того, что A14: C14 (1,2,3) и A15: C15 (1,2,3) имеет одинаковые значения, я получаю ошибку несоответствия типа. Как я могу сравнить два диапазона, как это?сравнить два ряда строк с таким же количеством ячеек

ответ

0

Вы просто не можете этого сделать. Это не так, как работают диапазоны. Вам нужно перебирать каждую ячейку в диапазонах, используя какой-то цикл for. Вы можете добавить проверки, чтобы вы выявляли случаи, когда количество ячеек не равно (очевидно, что диапазоны отличаются, если это так).

+0

Я не верю, что это правда. Вы можете сравнивать диапазоны. @alex, вы пробовали формула массива в моем ответе? –

+0

Это формула. Я отвечал на его использование чистого VBA. В противном случае ваше решение является еще одним решением. – ApplePie

+0

Я также включил в свой ответ чистый вариант VBA. –

3

Для этого вам не нужен VBA. Попробуйте эту формулу массива:

=AND(EXACT(A14:C14,A15:C15)) 

После ввода в формуле использовать Ctrl + SHIFT + Введите, чтобы установить ее в качестве формулы массива.

Он вернет TRUE, если диапазоны равны и FALSE, если они не являются.

Если вам нужно сделать это с помощью VBA, попробуйте следующее:

Sub CompareTwoRanges() 
    Dim compareRanges As Boolean 
    compareRanges = ActiveSheet.Evaluate("=AND(EXACT(A14:C14,A15:C15))") 
End Sub 

EDIT: Я не люблю ActiveSheet, и я не люблю жестко зашитых диапазоны, поэтому здесь более полный фрагмент:

Sub CompareTwoRanges() 
    Dim wb As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 
    Dim rng1 As Range 
    Dim rng2 As Range 

    Set wb = ThisWorkbook 
    Set ws1 = wb.Sheets("Sheet1") 
    Set ws2 = wb.Sheets("Sheet2") 
    Set rng1 = ws1.Range("A14:C14") 
    Set rng2 = ws2.Range("N3:P3") 

    If rangesAreEqual(rng1, rng2, ws1, ws2) Then 
     MsgBox "The ranges are equal." 
    Else 
     MsgBox "Sorry. The ranges are NOT equal." 
    End If 
End Sub 

Function rangesAreEqual(rng1 As Range, rng2 As Range, _ 
    ws1 As Worksheet, ws2 As Worksheet) As Boolean 
    ' booleans default to false 
    ' verify ranges have same dimensions 
    If rng1.Columns.Count <> rng2.Columns.Count Then Exit Function 
    If rng1.Rows.Count <> rng2.Rows.Count Then Exit Function 

    ' ranges are the same size. are their contents equal? 
    rangesAreEqual = ws1.Evaluate("=AND(EXACT(" & ws1.Name & "!" & _ 
      rng1.Address & "," & ws2.Name & "!" & rng2.Address & "))") 
End Function 
+0

Это лишь малая часть макроса, который я пытаюсь запрограммировать, поэтому мне нужно закодировать его как противостоящее нескольким шагам task.Thanks для метода. @ HeadofCatering – user2600411

+0

Я отредактировал свой ответ, чтобы включить версию VBA. Дайте мне знать, если это сработает для вас. –

+0

Я использую строки из двух разных листов, каждая из которых содержит несколько строк. Я пытаюсь выяснить цикл, в котором должна располагаться линия сравнения. Строки могут быть не на одном уровне строк, но мне нужно всего лишь сравнить ячейки в столбце A-C для каждого сравнения. @HeadofCatering – user2600411

Смежные вопросы