Страницы: 1
RSS
Проверка количества значений согласно справочнику
 
Уважаемые участники форума, добрый вечер!

В очередной раз прошу подсказать, как подступить к решению задачи.

Имею следующие данные:
- Лист1 (умная таблица) -  справочник значений соответствующий атрибутам, в свою очередь атрибут соответствует Категории.
- Лист Отчет (умная таблица) , где по каждому филиалу должен присутствовать набор этих значений, и количество этих значений должно быть равно количеству в справочнике.
На листе Отчет сделал пример ошибок, какие строки отсутствуют в Отчете.
Вопрос: Как вывести недостающие строки в отчете?
Решение средствами vba приветствуется.
 
Доброе время суток.
Цитата
evgeni_748 написал:
Решение средствами vba приветствуется.
Вариант.
 
Андрей VG, Огромное спасибо, то что надо. Не думал, что код такой маленький получится. Мало что понятно))))  Подскажите пожалуйста, а без создания новой таблицы можно обойтись, например обновлять таблицу на листе "анализ".
Изменено: evgeni_748 - 19.06.2020 23:46:22
 
Цитата
evgeni_748 написал:
а без создания новой таблицы можно обойтись
Можно, по существу результат это SQL запрос к этой книге, пока она носит такое название и находится в папке c:\path - можно таблицу результат только обновлять. При необходимости подправить путь и имя файла в строке подключения.
А лучше тоже самое делать на Power Query и не зависеть от пути и имени - только обновлять :)
 
Андрей VG, PQ не подходит, на работе excel 2007 стоит.
 
Цитата
evgeni_748 написал:
excel 2007
Предупреждать ж надо - чего так стесняться-то? Ну, тогда используйте SQL версию - будет там работать. Код на словарях уже настолько истоптанная тема, что совсем нет интереса писать. Может кто-нибудь другой - подождите. Пятница, выходные, лето, дача. Народу сейчас не много, но может кто и подтянется.
 
Всем добрый вечер.
Друзья прошу подсказать варианты решения моей задачи.
Спасибо Андрей VG, за предложенный вариант, он работает, но мне не подошел, так как с файлом будут работать на других компьютера, где имя файла и путь могут меняться.
Если ли более универсальное решение получить список отсутствующих значений на лист "Ошибки"????
Файл прикладываю.
 
Может кто подскажет в какую сторону копать? Очень надо....
 
Если сделаем на словаре - не скажете что работаете на МАКе? :)
Код
Option Explicit

Sub Errors_()
    Dim a, i&, t$, Dic As Object, Dic2 As Object, k
    Dim col As New Collection, arr

    With Sheets("ОТЧЕТ")
        a = .Range("D4", .Cells(.Rows.Count, "A").End(xlUp)).Value
    End With

    Set Dic = CreateObject("Scripting.Dictionary"): Dic.comparemode = 1
    Set Dic2 = CreateObject("Scripting.Dictionary"): Dic2.comparemode = 1

    With Dic
        For i = 1 To UBound(a)
            t = a(i, 2)
            Dic2.Item(t) = 0&
            t = a(i, 1) & "|" & t & "|" & a(i, 3) & "|" & a(i, 4)
            .Item(t) = 0&
        Next
    End With

    With Sheets("Лист1")
        a = .Range("C6", .Cells(.Rows.Count, "A").End(xlUp)).Value
    End With

    For Each k In Dic2.keys
        For i = 1 To UBound(a)
            t = a(i, 1) & "|" & k & "|" & a(i, 2) & "|" & a(i, 3)
            If Not Dic.exists(t) Then
                col.Add t
            End If
        Next
    Next

    ReDim a(1 To col.Count + 1, 1 To 4): i = 1
    arr = Split("Категория|Филиал|Атрибут|Значение", "|")
    a(i, 1) = arr(0)
    a(i, 2) = arr(1)
    a(i, 3) = arr(2)
    a(i, 4) = arr(3)

    For Each k In col
        i = i + 1
        arr = Split(k, "|")
        a(i, 1) = arr(0)
        a(i, 2) = arr(1)
        a(i, 3) = arr(2)
        a(i, 4) = arr(3)
    Next

    With Sheets("Ошибки").[a10].Resize(i, 4)
        .Value = a
        .Borders.Weight = xlThin
    End With
End Sub

Изменено: Hugo - 31.07.2020 22:54:32
Страницы: 1
Наверх