Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2014, 09:19   #1
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию Поиск несоответствий с заливкой цветом

Добрый день, уважаемые эксперты!
Хочу оптимизировать код – написал его на циклах, но работает долго.., помогите написать на словаре (или другие варианты). К сожалению пока словарь не смог осилить.( Во вложении пример. Принцип работы д.б. такой: макрос ищет показатель из Листа 1 в Листе 2 (столбец 2) и найдя сравнивает данные по всей строке, когда находит несоответствие, делает заливку ячейки красным (на Листе 1). Столбцы в обоих листах соответствуют друг другу. Несоответствия которые должны быть закрашены выделил толстой внешней границей в нескольких ячейках. Можно без примера пояснить, «на пальцах» так сказать…
Вложения
Тип файла: rar пример.rar (77.2 Кб, 10 просмотров)
MaxxVer вне форума Ответить с цитированием
Старый 30.05.2014, 10:47   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код писать некогда, но про словарь на словах:
1 для скорости берём данные второго листа в массив.
2 цикл по массиву (2 вложенных), собираем ключи "Показатель 1|Данные 1" и т.д., каждый заносим в словарь, каждому в Item заначение этой пары (для "Показатель 1|Данные 1" это 5, далее для "Показатель 1|Данные 2" будет 78 и т.д.).
3 п.1 по первому листу.
4 п.2 по массиву (кстати можно использовать одну переменную/массив - сэкономите память), но не заносим в словарь, а проверяем уже занесённое. Если отличается - красим на листе, если нет вообще - чешем репу...

Если данных много - может не хватить памяти, тогда придётся как-то делить данные на части.

P.S. Вот написал:
Код:
Option Explicit

Sub tt()
    Dim a(), i&, ii&, t$

    With CreateObject("Scripting.Dictionary"): .comparemode = 1
        a = Sheets(2).[b6].CurrentRegion.Value
        For i = 2 To UBound(a)
            For ii = 2 To UBound(a, 2)
                .Item(a(i, 1) & "|" & a(1, ii)) = a(i, ii)
            Next
        Next
        a = Sheets(1).[b6].CurrentRegion.Value
        For i = 2 To UBound(a)
            For ii = 2 To UBound(a, 2)
                t = a(i, 1) & "|" & a(1, ii)
                If .exists(t) Then
                    If .Item(t) <> a(i, ii) Then Sheets(1).[b6].CurrentRegion.Cells(i, ii).Interior.Color = vbRed
                Else
                    MsgBox "Нет пары " & t
                End If
            Next
        Next
    End With

End Sub
Хотя думаю вместо сообщения лучше просто закрасить:
Код:
Sheets(1).[b6].CurrentRegion.Cells(i, ii).Interior.Color = vbRed
Ну в общем тут чешем репу...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.05.2014 в 11:04.
Hugo121 вне форума Ответить с цитированием
Старый 30.05.2014, 11:45   #3
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Спасибо, наглядно, сейчас буду изучать.
MaxxVer вне форума Ответить с цитированием
Старый 30.05.2014, 11:53   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Хотя если соответствие заголовков двух листов полное - то тут словарь и не нужен, достаточно идти циклом по любому диапазону/массиву и смотреть соответствие аналогичных элементов в обоих массивах. Быстрее конечно идти и смотреть в массивах.
Если же есть частично сдвиги/пропуски критериев (в шапках) - то словарь то что нужно.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.05.2014, 12:59   #5
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Ага, понял, словарь будет универсальнее, на нем и остановлюсь, всё получилось, еще раз спасибо!
MaxxVer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в ячейке текста с определённым цветом Скрипт Microsoft Office Excel 1 07.06.2013 19:23
Как организовать поиск ячейки с определенным значением и выделение ее цветом Arty_ Microsoft Office Excel 0 24.02.2012 07:00
Сравнивание таблиц и выявление несоответствий irinka2706 Microsoft Office Excel 4 22.02.2012 09:04
Поиск по выделенным красным цветом строк и копирование их на новый лист. PetroD Microsoft Office Excel 11 10.08.2010 15:01
Поиск несоответствий в двух таблицах Stevan Microsoft Office Excel 3 03.02.2010 11:35