4

У меня есть инвентарный регистр. Это выглядит так:

Tran Type         Txn Date     Item     Quantity
Opening Balance   6/30/12      Item1     4
Opening Balance   6/30/12      Item2     7
Shipping          7/14/12      Item2    -1
Opening Balance   6/30/12      Item3     3
Shipping          7/2/12       Item3    -1
Opening Balance   6/30/12      Item4     5
Shipping          7/3/12       Item4    -1
Shipping          7/3/12       Item4    -1
Shipping          7/3/12       Item4    -1
Shipping          7/5/12       Item4    -1
Shipping          7/5/12       Item4    -1
Receiving         7/9/12       Item4    10

Регистр, очевидно, просто отмечает каждую транзакцию за определенный период: начальное сальдо, отгрузка, получение и возврат.

Я использую этот регистр инвентаря, чтобы сформировать сводную таблицу, которая выглядит следующим образом:

Sum of Quantity     Column Labels
Row Labels          6/30/12     7/2/12     7/3/12     7/5/12     7/6/12     7/9/12
Item1                 4           4           4          4          4          4
Item2                 7           7           7          7          7          7
Item3                 3           2           2          2          2          2
Item4                 5           5           2          0          0         10

Функция сводной таблицы состоит в том, чтобы хранить промежуточные суммы уровней инвентаря для каждого отдельного предмета в день.Формат сводной таблицы полезен, потому что он поддерживает эти итоговые значения для каждого дня, когда наш склад обрабатывал транзакции для ЛЮБОГО предмета, в отличие от исходных данных, которые просто перечисляют даты транзакций, как они произошли для этого конкретного товара.

Используя эти промежуточные итоговые данные в сводной таблице, я хотел бы отслеживать дни, когда для каждого товара было 0 запасов. Вот сложная часть: я хотел бы сохранить этот счет как часть сводной таблицы, чтобы счет был динамическим, когда я группирую данные по месяцам / кварталам / годам (чтобы мы могли видеть общее количество дней на складе по элементам за каждый период).

Если я могу что-то сделать с базовыми данными, которые позволят мне получить эту информацию об отсутствии на складе, это здорово. Если я смогу сделать это непосредственно в сводной таблице, это даже лучше.

Еще одно более эффективное решение позволит мне также генерировать данные для последовательных дней отсутствия на складе, как только товар достигнет нуля, а затем просматривать средние значения за этот период в сводной таблице. Я знаю, что большая часть этого должна быть сделана в исходных данных, и я даже знаю, как это нужно сделать, но я не могу связать это вместе в формуле. Сначала я отсортировал данные по дате, а не по имени элемента. Я создал новый столбец, чтобы сохранить итоги инвентаризации ("Итоговое значение" - это имя столбца). Как только итоговое итоговое значение достигнет нуля, мне нужно найти следующую строку, где Дата будет позже, чем Текущая транзакция, где Имя элемента будет таким же, и где тип транзакции будет "получение". Оттуда мне нужно будет найти разницу между датами транзакций. Может кто-нибудь, пожалуйста, помогите мне придумать формулу для этого?

И наконец, поскольку наши данные содержат только дни, когда склад обрабатывал транзакции, мне интересно, есть ли способ отобразить отсутствующие даты (т.е. выходные и праздничные дни) в сводной таблице? Это не главное, но это поразило бы верхушку.

РЕДАКТИРОВАТЬ: После просмотра многих ответов здесь, я решил попытаться решить эту проблему также с помощью Access или SQL Server, и я повторно разместил вопрос в StackOverflow с акцентом на использование запросов и вычисляемых столбцов, чтобы понять это. из.

Тем не менее, я все еще очень открыт для решения этой проблемы с помощью Excel, если у кого-то есть еще идеи! Так как я могу получить промежуточные итоги в моих исходных данных, мне интересно, могу ли я выполнить Нет в наличии с помощью операторов if в новом столбце.

Если промежуточный итог равен нулю, то мне нужно найти самую следующую транзакцию для того же элемента, где тип транзакции - "Получение", а затем вернуть дату этой следующей транзакции в столбец. Однако я не уверен, как объединить все эти элементы в одну формулу. После того как я верну дату следующей транзакции получения, я смогу вычесть Txn Date текущей строки для разницы в днях.

Это будет выглядеть так:

Tran Type         Txn Date     Item     Quantity  Stock   Out of Stock
Opening Balance   6/30/12      Item4     5          5
Shipping          7/3/12       Item4    -1          4
Shipping          7/3/12       Item4    -1          3
Shipping          7/3/12       Item4    -1          2
Shipping          7/5/12       Item4    -1          1
Shipping          7/5/12       Item4    -1          0         4 Days
Receiving         7/9/12       Item4    10         10

Оттуда я мог бы сделать еще одну сводную таблицу с итогами по элементам или что-то подобное.

2 ответа2

2

Я считаю это (или большую часть этого?) можно сделать в Excel без VBA, но пытаюсь объяснить, как это другое дело.

  1. Это помогает идентифицировать начальные сальдо по элементам, поэтому добавьте ColumnA в свой инвентарный регистр (далее именуемый Sheet1) и поместите = =B2&D2 A2 в A2 (предполагается, что "Tran Type" был в A1).

  2. Не хочу мешать Sheet1 так в Sheet2!ColumnB помещает один экземпляр каждого элемента (Данные> Дополнительно> Диапазон списка> =$D2:$D[last occupied row] > Копировать в другое место> Копировать в: [в пределах листа1]> Только уникальные записи, затем копировать результирующий список)

  3. Заполните баллы 30.06.12 в Sheet2!ColumnC ["вручную", вероятно, проще всего, если вы копируете с Sheet1 после сортировки по Item в Tran Type]

  4. Поместите 6/30/12 (если вы должны использовать эту запись!) в Sheet2!C1 и =1+C1 в Sheet2!D1 .

  5. Поместите =AND(D1>=$A2,D1<=$B2) в Sheet2!D2 [для использования при подсчете запасов за определенный промежуток времени].

  6. Укажите дату начала подсчета запасов в A2 и дату окончания в B2 .

  7. Put =IF(VLOOKUP("Opening Balance"&$B4,Sheet1!$A:$C,3,FALSE)>D$1,"",IF(VLOOKUP("Opening Balance"&$B4,Sheet1!$A:$C,3,FALSE)=D$1,VLOOKUP("Opening Balance"&$B4,Sheet1!$A:$E,5,FALSE),C4+SUMIFS(Sheet1!$E:$E,Sheet1!$C:$C,Sheet1!K$2,Sheet1!$D:$D,$B4)))’ на Sheet2!D4 и скопируйте для всех предметов.

  8. Скопируйте Sheet2!ColumnD по мере необходимости [предлагаю не более +1 года!) и обратите внимание на последний столбец [здесь предполагается, что Q].

  9. В Sheet2!A4 положить =COUNTIFS(C4:Q4,0,C$2:Q$2,"=TRUE") и скопировать все элементы.

  10. Если ваши Предметы действительно названы так, как в примере, вы можете настроить больше, чем, по вашему мнению, вам понадобится на выбранный вами период, но в противном случае вам придется остерегаться новых Предметов.

  11. После выбранного периода перенесите последние значения, как будто "Начальные сальдо" на новый лист.

  12. Попробуйте любые альтернативы!

0

Я не совсем получил все ваши очки, но давайте начнем с последнего, который, я думаю, у меня есть хорошее решение для вас. Может быть, мы можем построить его оттуда.

Таким образом, я использовал некоторые аккуратные формулы, чтобы добраться до этой таблицы:

Tran Type   Txn Date    Item    Quantity    Stock   Outstock day    Restock day Days without stock
Receiving   03.06.2012  Item4   5           5           
Receiving   30.06.2012  Item1   4           4           
Shipping    02.07.2012  Item3   -1          -1          
Shipping    03.07.2012  Item4   -1          4           
Shipping    03.07.2012  Item4   -1          3           
Shipping    03.07.2012  Item4   -1          2           
Shipping    03.07.2012  Item4   -1          1           
Shipping    03.07.2012  Item4   -1          0       03.07.2012     03.08.2012      31
Receiving   09.07.2012  Item3   10          9           
Shipping    14.07.2012  Item2   -1          -1          
Receiving   01.08.2012  Item2   7           6           
Receiving   02.08.2012  Item3   3           12          
Receiving   03.08.2012  Item4   5           5           
Receiving   09.08.2012  Item4   10          15          
Receiving   10.08.2012  Item5   11          11          
Receiving   11.08.2012  Item6   12          12          
Receiving   12.08.2012  Item4   13          28          
Receiving   13.08.2012  Item8   14          14          

Склад

C2 = SUMIF($C$1:$C2,$C2,$D$1:D2)

-> это даст вам запас хода с самого начала, без указания начальной точки.

День распродаж

F2 = IF(E2=0,B2,"")`

День Restock

G2 = IF(E2=0,=INDEX($B:$B,MATCH($C2,OFFSET($C:$C,ZEILE($C2),0,ROWS($C:$C)-ROW($C2),1),0)+ROW($C2)),"")`

-> это работает, если вы сортируете свои данные по дате, и когда нет никаких отправок для элемента, после этого его нет в наличии

Дни без акции

H2 = IF(E2=0,G2-F2,"")

-> здесь вы можете быть осторожны, вычитание дат не всегда приводит к правильному подсчету, но это еще одна проблема.

Главное волшебство - функция offset сочетании с match . Смещая диапазон, с которым работает сопоставление диапазонов, вы исключаете любые данные до строки, в которой вы находитесь сейчас, затем выполняется поиск первого вхождения текущего элемента.

Я работал над решением этой проблемы с помощью этой формы, но столкнулся с трудностями при ее настройке, чтобы получить только первую дату для текущего элемента, а не для любого элемента.

VLOOKUP("Receiving",OFFSET(A:C,ROW(C2)-1,0,ROWS(C:C)-ROW(C2)-1,3),2,FALSE)

Надеюсь, это поможет вам или другим, я рад расширить это ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .