У меня есть данные, которые мне крайне необходимо проанализировать, и я не знаю, как поступить. Данные в трех столбцах; первая дата. Даты не в порядке (по разным причинам), а новые данные просто добавляются в конец списка. У меня также есть цена продажи продукта во втором столбце и тип продукта в третьем.  Например:

пример данных

Расчеты должны основываться на семи самых последних ценах любого типа. 3-я самая низкая цена и 2-я самая высокая цена входят в таблицу, начиная с ячеек «A» (F12) и «B» (G12), соответственно.

Третья формула должна исключать (игнорировать) самую высокую и самую низкую из семи самых последних цен и вычислять среднее из оставшихся пяти цен. Это идет в последнем столбце таблицы, начиная с ячейки «C» (H12).

Затем мне нужен комбинированный гистограмма с линейным графиком "type" на горизонтальной оси и "price" на вертикальной.  Мне нужна столбчатая диаграмма с накоплением, показывающая нижний диапазон (ячейка "A") и более высокий диапазон (ячейка "B"), а линейный график должен быть наложен на средние значения (ячейка "C").

Я не мастер Excel, и я попробовал все учебные пособия по самопомощи, которые я могу решить. Я дошел до мысли, что VLOOKUP может быть полезен, но сейчас я в растерянности.

1 ответ1

0

Хорошо, ограничение в отношении нескольких продаж одного и того же типа в данный день, о котором говорил Скотт, сделало это возможным. Но это все еще довольно сложно. Использование VBA может быть намного проще, и, возможно, кто-то здесь опубликует процедуру.

Я собираюсь начать с использования таблицы «помощник», потому что полезно видеть промежуточные данные и дважды проверять, что все рассчитывается правильно, но я также покажу формулы, которые не используют таблицу помощника. Таблица помощников показана ниже вместе с результатами.

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

Во-первых, нам нужен массив из семи самых последних цен для каждого типа. Как только это станет доступно, легко рассчитать три показателя в таблице результатов из этого массива.

Начнем с этого выражения: ($C$2:$C$55=ROW()-1) . Это часть формулы в F2, поэтому ROW()-1 равно 1, и это выражение дает массив значений True/False, причем True везде, где Type равен 1, и False везде. По мере заполнения ROW() увеличивается, поэтому в следующей строке он дает массив с True, где Type равен 2 и т.д.

Теперь мы умножим этот массив на столбец дат: ($A$2:$A$55)*($C$2:$C$55=ROW()-1) . Это дает массив, содержащий дату, где Type равен 1, и False везде.

Теперь нам нужны самые последние 7 из этих дат, и мы получаем те, которые используют функцию LARGE() . Из-за вышеуказанного ограничения (на каждую дату есть только одна продажа Типа 1), это дает даты 7 самых последних продаж Типа 1:

LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-1),{1,2,3,4,5,6,7})

Ряд чисел в фигурных скобках указывает LARGE() возвращать значения с 1-го по 7-е по величине.

Теперь мы используем IF() чтобы получить цены, соответствующие этим датам:IF($A$2:$A$55=LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-1),{1,2,3,4,5,6,7})*($C$2:$C$55=ROW()-1),$B$2:$B$55)

Первая часть логического теста IF() возвращает массив, где дата в столбце A является одной из 7 дат выше, и этот массив умножается на массив, где type = 1 снова, потому что другие типы были проданы на тех 7 свиданий. Таким образом, IF() проверяет, равна ли дата в столбце A одному из массива из 7 самых последних дат, и была ли конкретная продажа в эту дату для Type = 1. Если оба эти условия выполняются, IF() возвращает продажную цену из столбца B и False в противном случае.

Теперь, чтобы перечислить цены в вспомогательной таблице от высокой к низкой, мы используем LARGE():(LARGE(IF($A$2:$A$55=LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-1),{1,2,3,4,5,6,7})*($C$2:$C$55=ROW()-1),$B$2:$B$55),COLUMN()-5)

Эта формула находится в столбце F, поэтому COLUMN()-5 равно 1, и формула возвращает первое по величине значение массива в этом столбце. По мере заполнения COLUMN() увеличивается, поэтому в следующем столбце он дает второе по величине значение и т.д.

Наконец, формула обернута в IFERROR() поэтому она будет возвращать пустое место, где имеется менее 7 продаж данного типа. Окончательная формула:

=IFERROR(LARGE(IF($A$2:$A$55=LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-1),{1,2,3,4,5,6,7})*($C$2:$C$55=ROW()-1),$B$2:$B$55),COLUMN()-5),"")

вводится в F2. Поскольку это формула массива, ее необходимо вводить с помощью клавиши CTRL Shift Enter, а не просто Enter. Если введено правильно, Excel окружит формулу фигурными скобками {} в строке формул. После ввода выберите F2 и заполните формулу вниз, а затем поперек, чтобы получить таблицу помощников выше.

Теперь легко заполнить таблицу результатов. Эти две формулы

=SMALL(F2:L2,3) and =LARGE(F2:L2,2)

вычислите 3-е наименьшее и 2-е наибольшие значения в первой строке вспомогательной таблицы. И эта формула

=AVERAGE(IFERROR(LARGE(F2:L2,{2,3,4,5,6}),""))

вычисляет среднее из средних 5 значений. Это также формула массива, поэтому она должна быть введена, как указано выше. Заполнение этих формул приводит к таблице результатов.

Чтобы заполнить таблицу результатов без использования вспомогательной таблицы, используйте эти три формулы массива в F, G и H12 и заполните:

=SMALL(IFERROR(LARGE(IF($A$2:$A$55=LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-11),{1,2,3,4,5,6,7})*($C$2:$C$55=ROW()-11),$B$2:$B$55),{1,2,3,4,5,6,7}),""),3)

=LARGE(IFERROR(LARGE(IF($A$2:$A$55=LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-11),{1,2,3,4,5,6,7})*($C$2:$C$55=ROW()-11),$B$2:$B$55),{1,2,3,4,5,6,7}),""),2)

=AVERAGE(IFERROR(LARGE(IFERROR(LARGE(IF($A$2:$A$55=LARGE(($A$2:$A$55)*($C$2:$C$55=ROW()-11),{1,2,3,4,5,6,7})*($C$2:$C$55=ROW()-11),$B$2:$B$55),{1,2,3,4,5,6,7}),""),{2,3,4,5,6}),""))

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

Любые комментарии или предложения приветствуются.

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