Страницы: 1
RSS
Расчёт количества изменений артикула.
 
Всем добрый день!
Помогите, пожалуйста, подобрать формулы или возможно прописать макрос.
Ситуация такая, есть много файлов в которых есть артикулы (в примере это ИД) и данные было и стало.
Нужно рассчитать разницу(с этим проблем нет))), а так же показать сколько изменений было по данному артикулу. файлы надо обрабатывать каждый день и информацию надо будет добавлять в итоговую таблицу.
Спасибо.
 
Перед тем как подсчитывать количество изменений, предлагаю поместить анализируемые таблицыВСЕ на один лист.
На этом листе таблицу дополнить вспомогательным столбиком,в котором функцией =СЧЁТЕСЛИ() прописать порядковые номера
изменений для каждого артикула.
А на листике ИТОГ с помощью связки функций =ИНДЕКС() и =ПОИСКПОЗ() заполнить итоговую таблицу.
 
Здравствуйте!
"ИД" - понятно. "Было и стало" - не понятно. Лист "Итог" - это отслеживание изменений в каждом файле или то, что должно получиться? По названиям артикулов и по изменениям (т.е. как получаются эти изменения) в столбцах "Было" и "Стало" ничего не понял.
Цитата
SolncA написал:
показать сколько изменений было по данному артикулу
"Изменения" - это когда в каком-то файле меняются либо "Было" либо "Стало"? Если лист "Итог" - то, что должно получиться, то тогда вообще непонятно, ни одно значение не совпадает. Или у изменений есть какой-то алгоритм, который нужно угадать? Хотя, может, это я где-то чего-то не понимаю... Извините за множество вопросов
 
Как я вижу по примеру - было/стало никого не волнует, собираются только значения разницы.
Если так - то можно сперва собрать словарь коллекций с этими разницами (готовыми, или оперативно посчитать), затем всё собранное выгрузить на лист.
Но никого не смущает что отсутствие изменения всё равно считается как изменение? (ива1 20 3 3)
Изменено: Hugo - 26.02.2017 11:31:04
 
Hugo,
Цитата
Hugo написал:
Но никого не смущает что отсутствие изменения всё равно считается как изменение? (ива1 20 3 3)
ива1  Лист1 - стр.3 = 20, стр.6 = 3 ,     Лист5 - стр.3 = 3 , стр.6 = 10
Меня смущает - автор молчит.
 
Цитата
_Igor_61 написал:"Было и стало" - не понятно. Лист "Итог" - это отслеживание изменений в каждом файле или то, что должно получиться?
Было и стало это просто кол-ва по какому-то товару. т.е. на начало дня было 32, на конец дня стало 23. По сути важна только разница.
На странице итог я пыталась изобразить что должно получится, т.е. если по ИД было изменение то, она равна этой разнице, если были ещё разницы по этому ИД, то они должны быть отображены в следующем столбце. Если их не было то и не было.
Ничего страшного что столько вопросов, это наоборот хорошо)  
 
Цитата
Hugo написал:
Но никого не смущает что отсутствие изменения всё равно считается как изменение? (ива1 20 3 3)
По идее если изменений не было, то считать их не надо.
т.е. надо показать какой были они вообще или нет (эти изменения = разница).
может я конечно не очень удачный пример вложила... :(
 
Цитата
Valera2 написал:
Цитата
Меня смущает - автор молчит.
у автора были небольшие проблемы с интернетом. :oops:
Изменено: SolncA - 26.02.2017 13:03:41
 
Цитата
Valera2 написал:
А на листике ИТОГ с помощью связки функций =ИНДЕКС() и =ПОИСКПОЗ() заполнить итоговую таблицу.
а новые данные тогда получается добавлять на лист "ВСЕ" и на листе "Итог" заново протягивать формулу?
 
Макрос - удалите лист итог, чтоб и его не перебирать:
Код
Sub Perebor()    'коллекция в словаре
    Dim a, i&, x&, t$, Dic As Object
    Dim el, col, sh As Object

    Set Dic = CreateObject("Scripting.Dictionary")
    Dic.CompareMode = 1

    For Each sh In ThisWorkbook.Sheets
        a = sh.Range("D2", sh.Cells(sh.Rows.Count, "A").End(xlUp)).Value
        With Dic
            For i = 1 To UBound(a)
                t = a(i, 1)
                If Not .exists(t) Then .Add t, New Collection
                .Item(t).Add a(i, 4)
            Next
        End With
    Next

    With Workbooks.Add(1).Sheets(1)
        i = 1
        For Each el In Dic.keys
            i = i + 1: x = 1
            .Cells(i, 1) = el
            For Each col In Dic.Item(el)
                x = x + 1
                .Cells(1, x) = "изменение " & x    'можно перепроверить чтоб не переписывать, а вообще можно по факту прописать один раз  в самом конце :)
                .Cells(i, x) = col
            Next
        Next
    End With

End Sub
Изменено: Hugo - 26.02.2017 15:27:57 (Забыл одну точку перед cells поставить... На работу в данном случае не влияло - но некрасиво...)
 
Hugo, Valera2,
СПАСИБО вам огромное!
Страницы: 1
Наверх