Страницы: 1
RSS
Помогите сопоставить данные в двух таблицах
 
Здравствуйте форумчане
До сегодняшнего момента устраивал визуальный контроль который приведен в файле вылазили отдельные косяки в итогах которые можно было найти глазами в нижестоящей выборке но сегодня демоны прислали данные в которых куча косяков и визуально по общему итогу их не видно, пытался сопоставить отдельно по кодам две таблицы лист "Свод 2014" с таблицей лист "Проверка" при помощи функции ВПР но косяк в том что в Своде есть коды которые должны сопоставится (пример в листе "сопост" к примеру 7400 - лист "свод" 2014=сумм(7401, 7402, 7403....)- лист "Проверка" как можно реализовать данное условие.
Изменено: seregeyss - 21.11.2013 11:43:16
Лень двигатель прогресса, доказано!!!
 
Извините когда уменьшал объем файла сохранился на последнем слисте проблема на листе Проверка
Лень двигатель прогресса, доказано!!!
 
Добрый день.
Я думаю мало кто понял что такое "в Своде есть коды которые должны сопоставится"
Предположения конечно можно строить... но зачем?

P.S. Хотя в общем смысл понятен (после анализа данных).
Как сделать формулами - я пас. Я бы макросом делал, как-то опять словари-массивы... думать нужно.
Только с теми жёлтыми в "сопост" непонятно...
Изменено: Hugo - 21.11.2013 10:31:13
 
В листе Свод 2014 в столбце "I" коды направления они же в листе проверка столбец "А" они же в листе сопост
Лень двигатель прогресса, доказано!!!
 
Эт как обычно бывает я знаю значит и все в курсе  :)  извините за неточное описание
Лень двигатель прогресса, доказано!!!
 
Hugo расцветка в листе сопост ни чего не значит
Лень двигатель прогресса, доказано!!!
 
Я думаю что значит  :)
Вообще или я туплю, или на самом деле не просто. Некогда вникать - а за 5 минут в деталях алгоритм не сложился...
 
Ну эт я для себя выделял коды которые абсолютно разные при сопоставлении
Лень двигатель прогресса, доказано!!!
 
Код
Заготовка. Нужно доделывать динамические диапазоны.
Ну пока как с формулами - работает где указано :)
Вроде как работает.


Sub sravn()
    Dim a, b, i&, t&

    With CreateObject("Scripting.Dictionary"): .comparemode = 1

        a = Sheets(1).[i11:u86].Value

        For i = 1 To UBound(a): .Item(CStr(a(i, 1))) = i: Next

        b = Sheets(2).[a2:b70].Value
        For i = 1 To 3
            If Not .exists(CStr(b(i, 2))) Then
                .Item(CStr(b(i, 2))) = .Item(CStr(b(i, 1)))
            Else
                t = .Item(CStr(b(i, 2)))
                a(t, 13) = a(t, 13) + a(.Item(CStr(b(i, 1))), 13)
            End If
        Next

        For i = 4 To UBound(b): .Item(CStr(b(i, 2))) = .Item(CStr(b(i, 1))): Next

        b = Sheets(3).[a5:d81].Value
        ReDim c(1 To UBound(b), 1 To 1)
        For i = 1 To UBound(b)
            t = .Item(CStr(b(i, 1)))
            a(t, 13) = a(t, 13) - b(i, 4)
        Next

        For i = 1 To UBound(b)
            t = .Item(CStr(b(i, 1)))
            If a(t, 13) = 0 Then c(i, 1) = "OK" Else c(i, 1) = "NO"
        Next

        Sheets(3).[e5].Resize(UBound(c), 1).Value = c
    End With
End Sub 
 
Вернее так - чтоб доделывать динамические диапазоны полностью, нужно переделывать таблицу "сопост". Т.к. смотреть на цвет не по феншую  :(
 
Hugo извиняюсь за вопрос, что делает этот макрос он сравнивает только коды и говорит что коды из листа "Проверка" соответствуют кодам из листа "Свод 2014" с учетом кодов листа "сопост" и макрос пишет все ОК.
Если да, то тут все будет хорошо полюбому меня больше беспокоит косяк в отражении по данным кодам сумм в листе Проверка и сумм отраженным по данным кодам в листе Свод 2014.
ПС
Если я запрыгнул в перед извиняюсь я просто смутно понимаю что ваш макрос делает на самом деле

и еще что нужно переделать в таблице в соответствии с вашим комментарием "нужно переделывать таблицу "сопост". Т.к. смотреть на цвет не по феншую"
Лень двигатель прогресса, доказано!!!
 
Нет, он сравнивает сумму сумм  :)  
Т.е. если в итоге получается 0 - то OK". Если не 0 - то "NO"
If a(t, 13) = 0 Then c(i, 1) = "OK" Else c(i, 1) = "NO"
 
Про цвет - просто было бы удобнее, когда те коды, которые "наоборот", были бы в двух других отдельных столбцах. Тогда в макросе можно прописать их динамическое определение по расположению, а не по цвету, что проще и быстрее.
Ну если эти коды не меняются часто - можно оставить как есть, прописывая в коде
For i = 1 To 3
и далее
For i = 4 To UBound(b)

Ну а остальные диапазоны можно динамически определять кодом по наличию данных. Но делать некогда, да и не интересно. Попробуйте сами.
 
Hugo СПАСИБО Ваш код работает отлично
Я нашел руками почему не идет общая сумма просто  :evil:  отдельные товарищи которым бы руки повыдергивать не отразили объемы которые им довели можете глянуть выборку в файле
Лень двигатель прогресса, доказано!!!
 
Еще раз спасибо более ни чего не прошу
Лень двигатель прогресса, доказано!!!
 
Ну в примере ведь всё сошлось  :)
Я для теста менял пару сумм - в тех позициях/группах сразу появлялось "NO".
А к чему последние файлы - не понял...
 
:(   Эт я просто сначало начал сомневатся как же все ОК если общий итог не идет и полез сопоставлять руками и обнаружил что рукожопы просто тупо не поставили доведенные суммы а по массиву который имелся в наличии ваш макрос отработал на отлично

Еще раз спасибо
Изменено: seregeyss - 21.11.2013 15:40:41
Лень двигатель прогресса, доказано!!!
Страницы: 1
Наверх