Сравнение массивов vba excel

Обновлено: 05.07.2024

Доброго времени суток!
Прошу помощи в написании функции для сравнения двух двумерных массивов размерностью [n, 2].

Dim i As Long
Dim k As Long

Данные сравниваются, но почему-то не все.
Подскажите, пожалуйста, в чём я ошибаюсь?

Доброго времени суток!
Прошу помощи в написании функции для сравнения двух двумерных массивов размерностью [n, 2].

Dim i As Long
Dim k As Long

Данные сравниваются, но почему-то не все.
Подскажите, пожалуйста, в чём я ошибаюсь? Travelstar

Dim i As Long
Dim k As Long

Данные сравниваются, но почему-то не все.
Подскажите, пожалуйста, в чём я ошибаюсь? Автор - Travelstar
Дата добавления - 16.05.2014 в 09:28

Почему решили что не все? Думаю все, и даже излишне все - ведь после получения результата сравнения продолжаются.
Вообще со словарём было бы быстрее - ну если строк пара тысяч, то не важно. Почему решили что не все? Думаю все, и даже излишне все - ведь после получения результата сравнения продолжаются.
Вообще со словарём было бы быстрее - ну если строк пара тысяч, то не важно. Hugo Вот и по логике, вроде как всё и проверяется. А строк и действительно много. по несколько тысяч в каждом массиве.
А вот факт показывает несколько не тот результат (очень жаль, что не могу сейчас вложить программку. ).
В массивы я вгоняю диапазон из разных книг, первый столбец - данные типа String, второй - Date и при проверке, если совпали String-и, то проверяю даты, так вот, при проверке работы алгоритма видно, что не все значения, хоть они и равны, совпадают.
Возможно ли такая ситуация, что в одном из массивов в значениях типа String присутствуют буквы не EN, а RUS? / Вот и по логике, вроде как всё и проверяется. А строк и действительно много. по несколько тысяч в каждом массиве.
А вот факт показывает несколько не тот результат (очень жаль, что не могу сейчас вложить программку. ).
В массивы я вгоняю диапазон из разных книг, первый столбец - данные типа String, второй - Date и при проверке, если совпали String-и, то проверяю даты, так вот, при проверке работы алгоритма видно, что не все значения, хоть они и равны, совпадают.
Возможно ли такая ситуация, что в одном из массивов в значениях типа String присутствуют буквы не EN, а RUS? / Travelstar в значениях типа String присутствуют буквы не EN, а RUS
Редко, но бывает.
Если сравниваете строки, то добавьте Трим (лишние пробелы бываю намного чаще), типа такого
[vba] [/vba]
и еще , чтобы вести сравнение без учета регистра, в самомо верху модуля
[vba] в значениях типа String присутствуют буквы не EN, а RUS
Редко, но бывает.
Если сравниваете строки, то добавьте Трим (лишние пробелы бываю намного чаще), типа такого
[vba] [/vba]
и еще , чтобы вести сравнение без учета регистра, в самомо верху модуля
[vba] в значениях типа String присутствуют буквы не EN, а RUS
Редко, но бывает.
Если сравниваете строки, то добавьте Трим (лишние пробелы бываю намного чаще), типа такого
[vba] [/vba]
и еще , чтобы вести сравнение без учета регистра, в самомо верху модуля
[vba] [/vba] Автор - nilem
Дата добавления - 16.05.2014 в 11:45

Да и даты там может в секундах отличаются.
Покажите файл - можно неоригинальный

Ещё раз столкнулся - два числа совершенно одинаковые всюду глазом (и в Locals тоже) кодом не равны. Но если оба перевести в string - то ОК.

Да и даты там может в секундах отличаются.
Покажите файл - можно неоригинальный

Ещё раз столкнулся - два числа совершенно одинаковые всюду глазом (и в Locals тоже) кодом не равны. Но если оба перевести в string - то ОК. Hugo

Ещё раз столкнулся - два числа совершенно одинаковые всюду глазом (и в Locals тоже) кодом не равны. Но если оба перевести в string - то ОК. Автор - Hugo
Дата добавления - 16.05.2014 в 11:58

Спасибо за подсказки, но не помогло.
Вот несколько файлов
- Checking_Test.xlsm - программа
- Проверяемый файл.xls - то, что будет когда-то проверяться // пока пустой
- Отчёт PCN.xls - файл с которым мне необходимо сравнивать
- Отчёт Sat.xls - файл, который необходимо сравнить с Отчёт PCN

Алгоритм пока пишется, это наработки.
Если будут у кого-нибудь интересные замечания буду признателен.

Спасибо за подсказки, но не помогло.
Вот несколько файлов
- Checking_Test.xlsm - программа
- Проверяемый файл.xls - то, что будет когда-то проверяться // пока пустой
- Отчёт PCN.xls - файл с которым мне необходимо сравнивать
- Отчёт Sat.xls - файл, который необходимо сравнить с Отчёт PCN

Алгоритм пока пишется, это наработки.
Если будут у кого-нибудь интересные замечания буду признателен. Travelstar

Алгоритм пока пишется, это наработки.
Если будут у кого-нибудь интересные замечания буду признателен. Автор - Travelstar
Дата добавления - 16.05.2014 в 12:19

PS: функция называется Compare(arr1 as Variant, arr2 as Variant))

PS: функция называется Compare(arr1 as Variant, arr2 as Variant)) Travelstar

PS: функция называется Compare(arr1 as Variant, arr2 as Variant)) Автор - Travelstar
Дата добавления - 16.05.2014 в 12:21

Не, я отказываюсь разбираться.

Всё так непрозрачно, эта привязка к активной в некий момент книге/листу. Ещё куча MISSING, ну да это меньшее.
Покажите два файла, напишите код открытия этих конкретных файлов, определения диапазонов, передачу диапазонов на сравнение - вот тогда можно посмотреть что где как сравнивается или нет.
Я так и не смог ничего запустить - какие файлы открывать, что нажимать.

Не, я отказываюсь разбираться.

Всё так непрозрачно, эта привязка к активной в некий момент книге/листу. Ещё куча MISSING, ну да это меньшее.
Покажите два файла, напишите код открытия этих конкретных файлов, определения диапазонов, передачу диапазонов на сравнение - вот тогда можно посмотреть что где как сравнивается или нет.
Я так и не смог ничего запустить - какие файлы открывать, что нажимать. Hugo

Всё так непрозрачно, эта привязка к активной в некий момент книге/листу. Ещё куча MISSING, ну да это меньшее.
Покажите два файла, напишите код открытия этих конкретных файлов, определения диапазонов, передачу диапазонов на сравнение - вот тогда можно посмотреть что где как сравнивается или нет.
Я так и не смог ничего запустить - какие файлы открывать, что нажимать. Автор - Hugo
Дата добавления - 16.05.2014 в 12:51

очень нужна Ваша помощь. Есть два массива (пример приложил, размерность у них условная, на самом деле 10 тыс. и более записей в каждом), если их сравнить, в предыдущем массиве (в январе) произошли изменения (по данным последующего массива один из объектов исчез, он отмечен желтым цветом и обозначен "1").

Возможно сделать макрос для автоматизации этого процесса? Чтобы "ушедшие" объекты как-то выделялись, к примеру, единицами? Опираться при сравнении на цены и бюджеты объектов нельзя, т.к. их колебания условно составляют +-5%. Если конечно это никак нельзя заложить в код.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Сравнение двух многомерных массивов
Добрый день, помогите разобраться в простом примере работы с массивами ибо чтение теории заводит в.


Создание и сравнение двух массивов
Добрый день. Помогите написать VBA скрипт для екселя. суть : есть список сотрудников(фамилии).

Сравнение двух колонок (Excel)
Есть задача: нужно сравнить две колонки в экселе и что важное, нужно организовать так, чтобы.

Сравнение двух листов Excel
Требуется сравнить два листа EXCEL, заранее количество столбцов и строк в листах неизвестно, но.

а что гарантирует уникальность записи в таблицах?
первые три столбца?

пс. у Вас там на Пречистенке чудеса какие-то

а что гарантирует уникальность записи в таблицах?
первые три столбца?

пс. у Вас там на Пречистенке чудеса какие-то

Круто! Хорошо работает! А можно еще заложить в код изменение площади в районе 3% или это космос получится? и где у вас площадь? я не телепат, сорри
это будет совершенно другой код.
нужен другой подход - и я пока даже не определился, какой именно.
кстати, скорее всего, будет работать на порядок медленнее. и где у вас площадь? я не телепат, сорри
это будет совершенно другой код.
нужен другой подход - и я пока даже не определился, какой именно.
кстати, скорее всего, будет работать на порядок медленнее.

давайте на всякий случай уточним задачу?
надо:
для каждой записи из "правой" таблицы найти в "левой" таблице хотя бы одну в точности соответствующую ей по первым двум полям запись, причем значение третьего поля должно отличаться не более чем на 3%.
если ни одной такой записи не найдено, то напротив искомой записи слева ставим единичку.

давайте на всякий случай уточним задачу?
надо:
для каждой записи из "правой" таблицы найти в "левой" таблице хотя бы одну в точности соответствующую ей по первым двум полям запись, причем значение третьего поля должно отличаться не более чем на 3%.
если ни одной такой записи не найдено, то напротив искомой записи слева ставим единичку.

как проверите - пожалуйста, сообщите о результатах и, если не трудно - насколько медленнее работает этот макрос по сравнению с предыдущим на реальном объеме данных. Спасибо большое! Очень хорошо работает, разница во времени несущественная, на 19 тыс. записей в первом случае это занимает 10 сек, во втором случае около минуты.

Сравнение двух текстов в документе Excel
Необходимо сопоставить ячейки с текстом, имеющие описание одного и того же события, набранного .

Сравнение данных из двух разных файлов Excel
Добрый день, форумчане! До этого не имел дело с VBA. Начинаю только изучать. Начальство.

Excel: сравнение двух таблиц по первому столбцу
Помогите пожалуйста буду благодарен. Необхордимо сравнить две таблицы, по первому столбцу(part no).

Сравнение двух файлов Excel для выявления изменений
Добрый день! Excel 2010. В файл, на одном листе с неизменным количеством столбцов, раз в.

К сожалению, не разбираюсь в VBA, поэтому прошу помощи у знатоков в решении следующей задачи.

Суть задачи.

1. Лист 1 "Массив" содержит информацию (время от времени редактируется пользователем и вносится только в столбец "А"), которая проверяется (сопоставляется) со значениями эталонного справочника - см. Лист 2 "Эталон".

Если хотя бы одно значение листа 1 не совпадает (хотя бы на один символ, пробел до и после значения не учитывается) со всеми значениями эталонного справочника (по столбцам от А до J), тогда такое ложное значение (слово) в листе 1 подсвечивается красным цветом, а если такое значение совпадает со значением эталонного справочника, тогда значение (слово) листа 1 станет зеленого цвета.

Пример того, каким должен быть результат при работе макроса, содержится в файле "Как должно работать".

Пожалуйста, макрос пропишите в файле задача таким образом, чтобы макрос запускался при нажатии кнопки "запустить".

Заранее благодарю за содействие.

К сожалению, не разбираюсь в VBA, поэтому прошу помощи у знатоков в решении следующей задачи.

Суть задачи.

1. Лист 1 "Массив" содержит информацию (время от времени редактируется пользователем и вносится только в столбец "А"), которая проверяется (сопоставляется) со значениями эталонного справочника - см. Лист 2 "Эталон".

Если хотя бы одно значение листа 1 не совпадает (хотя бы на один символ, пробел до и после значения не учитывается) со всеми значениями эталонного справочника (по столбцам от А до J), тогда такое ложное значение (слово) в листе 1 подсвечивается красным цветом, а если такое значение совпадает со значением эталонного справочника, тогда значение (слово) листа 1 станет зеленого цвета.

Пример того, каким должен быть результат при работе макроса, содержится в файле "Как должно работать".

Пожалуйста, макрос пропишите в файле задача таким образом, чтобы макрос запускался при нажатии кнопки "запустить".

Заранее благодарю за содействие. Taurus

К сожалению, не разбираюсь в VBA, поэтому прошу помощи у знатоков в решении следующей задачи.

Суть задачи.

1. Лист 1 "Массив" содержит информацию (время от времени редактируется пользователем и вносится только в столбец "А"), которая проверяется (сопоставляется) со значениями эталонного справочника - см. Лист 2 "Эталон".

Если хотя бы одно значение листа 1 не совпадает (хотя бы на один символ, пробел до и после значения не учитывается) со всеми значениями эталонного справочника (по столбцам от А до J), тогда такое ложное значение (слово) в листе 1 подсвечивается красным цветом, а если такое значение совпадает со значением эталонного справочника, тогда значение (слово) листа 1 станет зеленого цвета.

Пример того, каким должен быть результат при работе макроса, содержится в файле "Как должно работать".

Пожалуйста, макрос пропишите в файле задача таким образом, чтобы макрос запускался при нажатии кнопки "запустить".

Заранее благодарю за содействие. Автор - Taurus
Дата добавления - 10.01.2014 в 15:21



= Мир MS Excel/Сравнение массивов - Мир MS Excel

Войти через uID

Войти через uID

Добрый вечер.Есть три массива с числами.Необходимо сравнить данные в них и при совпадении выделить в список.Если по отдельности перебором каждый,это понятно,а вот в массиве пока понимаю не до конца. Добрый вечер.Есть три массива с числами.Необходимо сравнить данные в них и при совпадении выделить в список.Если по отдельности перебором каждый,это понятно,а вот в массиве пока понимаю не до конца. megavlom Добрый вечер!
Вы не первый день на форуме и должны прекрасно знать, что прикрепленный файл-пример значительно ускорит решение. Или Вам быстро не нужно? К тому же это является нарушением 3 пункта правил форума. Добрый вечер!
Вы не первый день на форуме и должны прекрасно знать, что прикрепленный файл-пример значительно ускорит решение. Или Вам быстро не нужно? К тому же это является нарушением 3 пункта правил форума. kim Извините,что не доглядел отсутствие файла.Хотя с нашей связью. Извините,что не доглядел отсутствие файла.Хотя с нашей связью. megavlom Не совсем понял, как Вам нужен список, да и это вероятно не главное - поэтому пока вывожу в окно отладки (можно на лист/массив/строку выводить):
[vba]

Но в общем тот же перебор, но усовершенствованный - сперва загоняем данные в массивы, потом в словари, потом первый словарь сверяем с двумя другими.

Вариант с признаком столбца:
[vba]

Не совсем понял, как Вам нужен список, да и это вероятно не главное - поэтому пока вывожу в окно отладки (можно на лист/массив/строку выводить):
[vba]

Но в общем тот же перебор, но усовершенствованный - сперва загоняем данные в массивы, потом в словари, потом первый словарь сверяем с двумя другими.

Вариант с признаком столбца:
[vba]

Но в общем тот же перебор, но усовершенствованный - сперва загоняем данные в массивы, потом в словари, потом первый словарь сверяем с двумя другими.

Вариант с признаком столбца:
[vba]

Подскажите, есть ли в VBA функция сравнения двух масивов? Проблема в следующем, есть два масива разного размера(клиенты на начало недели и клиенты на конец недели), необходимо путем сравнения определить какие клиенты добавились, а какие выбыли за неделю.

  1. Option Explicit
  2. Option Base 1
  3. Function ArraysDifference(primArray As Variant , secondArray As Variant ) As Variant
  4. Dim newItems() As String 'конечный массив
  5. Dim item As Variant 'текущий элемент
  6. Dim tempItems As New Collection 'временная коллекция
  7. Dim count As Integer 'счётчик элементов
  8. 'заполняем коллекцию элементами первичного массива
  9. For Each item In primArray
  10. tempItems.Add item, item
  11. Next item
  12. 'проходим по второму массиву и пытаемся добавить его элементы в коллекцию;
  13. 'если такой элемент уже добавлен в первом цикле, генерируется ошибка;
  14. 'если ошибки не произошло, добавляем новый элемент в конечный массив
  15. count = 0
  16. For Each item In secondArray
  17. On Error Resume Next
  18. tempItems.Add item, item
  19. If Err = 0 Then
  20. count = count + 1
  21. ReDim Preserve newItems(count)
  22. newItems(count) = item
  23. End If
  24. On Error GoTo 0
  25. Next item
  26. ArraysDifference = newItems
  27. End Function
  28. Sub TestArrayDifference()
  29. Dim array1, array2 As Variant
  30. Dim newEmploy, escEmploy As Variant
  31. 'сотрудники в начале недели
  32. array1 = Array( "Дима" , "Вася" , "Петя" , "Костя" , "Паша" )
  33. 'сотрудники в конце недели
  34. array2 = Array( "Лёха" , "Игорь" , "Петя" , "Костя" , "Боря" )
  35. 'новые сотрудники
  36. newEmploy = ArraysDifference(array1, array2)
  37. 'выбывшие сотрудники
  38. escEmploy = ArraysDifference(array2, array1)
  39. End Sub
Михаил: А есть ли у тебя пример программного заполнения массива?
Массив можно заполнять из разных источников: диапазонов, файлов, функций. Какой вариант Вас интересует?
  1. Option Explicit
  2. Option Base 1
  3. Sub RangeArray()
  4. Dim theNumbers() As Integer 'массив
  5. Dim theRange As Range 'диапазон
  6. Dim item As Variant 'ячейка диапазона
  7. Dim i As Integer 'счётчик
  8. 'определяем диапазон
  9. Set theRange = ThisWorkbook.Worksheets( "Sheet1" ).Range( "A1:A5" )
  10. 'проходим по всем ячейкам и заносим их значения в массив
  11. i = 0
  12. For Each item In theRange
  13. i = i + 1
  14. ReDim Preserve theNumbers(i)
  15. theNumbers(i) = CInt (item)
  16. 'и сразу выводим
  17. Debug.Print theNumbers(i)
  18. Next item
  19. End Sub

Оператор Redim Preserve переопределяет размерность массива, сохраняя все его элементы.

Возможен и более рациональный вариант, в котором размерность массива определяется непосредственно перед циклом:

Читайте также: