Доброго времени суток! Прошу помощи в написании функции для сравнения двух двумерных массивов размерностью [n, 2].
[vba]
Код
Function Compare(arr1 As Variant, arr2 As Variant) ' массивы типа Variant - хранят диапазоны значений - каждый по 2 столбца Sheets(1).Activate
Dim i As Long Dim k As Long
For i = LBound(arr1) To UBound(arr1) For k = LBound(arr2) To UBound(arr2) If arr1(i, 1) = arr2(k, 2) Then ' тут сравниваю первую колонку первого массива и вторую колонку второго массива If arr1(i, 2) = arr2(k, 1) Then ' если ввреху всё ОК, то сравниваю вторую колонку первого и первую колонку второго... Cells(i, 2).Interior.Color = 255 ' ну и если совпало - что-то делаю.. End If End If Next k Next i
End Function
[/vba]
Данные сравниваются, но почему-то не все. Подскажите, пожалуйста, в чём я ошибаюсь?
Доброго времени суток! Прошу помощи в написании функции для сравнения двух двумерных массивов размерностью [n, 2].
[vba]
Код
Function Compare(arr1 As Variant, arr2 As Variant) ' массивы типа Variant - хранят диапазоны значений - каждый по 2 столбца Sheets(1).Activate
Dim i As Long Dim k As Long
For i = LBound(arr1) To UBound(arr1) For k = LBound(arr2) To UBound(arr2) If arr1(i, 1) = arr2(k, 2) Then ' тут сравниваю первую колонку первого массива и вторую колонку второго массива If arr1(i, 2) = arr2(k, 1) Then ' если ввреху всё ОК, то сравниваю вторую колонку первого и первую колонку второго... Cells(i, 2).Interior.Color = 255 ' ну и если совпало - что-то делаю.. End If End If Next k Next i
End Function
[/vba]
Данные сравниваются, но почему-то не все. Подскажите, пожалуйста, в чём я ошибаюсь?Travelstar
Сообщение отредактировал Travelstar - Пятница, 16.05.2014, 09:29
Почему решили что не все? Думаю все, и даже излишне все - ведь после получения результата сравнения продолжаются... Вообще со словарём было бы быстрее - ну если строк пара тысяч, то не важно...
Почему решили что не все? Думаю все, и даже излишне все - ведь после получения результата сравнения продолжаются... Вообще со словарём было бы быстрее - ну если строк пара тысяч, то не важно...Hugo
Вот и по логике, вроде как всё и проверяется...А строк и действительно много... по несколько тысяч в каждом массиве... А вот факт показывает несколько не тот результат (очень жаль, что не могу сейчас вложить программку...). В массивы я вгоняю диапазон из разных книг, первый столбец - данные типа String, второй - Date и при проверке, если совпали String-и, то проверяю даты, так вот, при проверке работы алгоритма видно, что не все значения, хоть они и равны, совпадают... Возможно ли такая ситуация, что в одном из массивов в значениях типа String присутствуют буквы не EN, а RUS? /
Вот и по логике, вроде как всё и проверяется...А строк и действительно много... по несколько тысяч в каждом массиве... А вот факт показывает несколько не тот результат (очень жаль, что не могу сейчас вложить программку...). В массивы я вгоняю диапазон из разных книг, первый столбец - данные типа String, второй - Date и при проверке, если совпали String-и, то проверяю даты, так вот, при проверке работы алгоритма видно, что не все значения, хоть они и равны, совпадают... Возможно ли такая ситуация, что в одном из массивов в значениях типа String присутствуют буквы не EN, а RUS? /Travelstar
Спасибо за подсказки, но не помогло... Вот несколько файлов - Checking_Test.xlsm - программа - Проверяемый файл.xls - то, что будет когда-то проверяться // пока пустой - Отчёт PCN.xls - файл с которым мне необходимо сравнивать - Отчёт Sat.xls - файл, который необходимо сравнить с Отчёт PCN
Алгоритм пока пишется, это наработки. Если будут у кого-нибудь интересные замечания буду признателен.
Спасибо за подсказки, но не помогло... Вот несколько файлов - Checking_Test.xlsm - программа - Проверяемый файл.xls - то, что будет когда-то проверяться // пока пустой - Отчёт PCN.xls - файл с которым мне необходимо сравнивать - Отчёт Sat.xls - файл, который необходимо сравнить с Отчёт PCN
Алгоритм пока пишется, это наработки. Если будут у кого-нибудь интересные замечания буду признателен.Travelstar
Всё так непрозрачно, эта привязка к активной в некий момент книге/листу... Ещё куча MISSING, ну да это меньшее... Покажите два файла, напишите код открытия этих конкретных файлов, определения диапазонов, передачу диапазонов на сравнение - вот тогда можно посмотреть что где как сравнивается или нет. Я так и не смог ничего запустить - какие файлы открывать, что нажимать...
Не, я отказываюсь разбираться...
Всё так непрозрачно, эта привязка к активной в некий момент книге/листу... Ещё куча MISSING, ну да это меньшее... Покажите два файла, напишите код открытия этих конкретных файлов, определения диапазонов, передачу диапазонов на сравнение - вот тогда можно посмотреть что где как сравнивается или нет. Я так и не смог ничего запустить - какие файлы открывать, что нажимать...Hugo
Sub ertert() Dim x, i&, s$ x = Range("A1").CurrentRegion.Value With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 2 To UBound(x) .Item(x(i, 1) & x(i, 2)) = i Next i x = Range("D1").CurrentRegion.Value For i = 1 To UBound(x) s = x(i, 2) & x(i, 1) If .Exists(s) Then Cells(.Item(s), 1).Interior.Color = vbGreen Next i End With End Sub
[/vba]
например: [vba]
Код
Sub ertert() Dim x, i&, s$ x = Range("A1").CurrentRegion.Value With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 2 To UBound(x) .Item(x(i, 1) & x(i, 2)) = i Next i x = Range("D1").CurrentRegion.Value For i = 1 To UBound(x) s = x(i, 2) & x(i, 1) If .Exists(s) Then Cells(.Item(s), 1).Interior.Color = vbGreen Next i End With End Sub