У меня есть данные, которые мне крайне необходимо проанализировать, и я не знаю, как поступить. Данные в трех столбцах; первая дата. Даты не в порядке (по разным причинам), и новые данные просто добавляются в конец списка. У меня также есть продажная цена продукта во втором столбце и тип продукта в третьем. Например:
Расчеты должны основываться на семи самых последних ценах любого типа. 3-я самая низкая цена и 2-я самая высокая цена входят в таблицу, начиная с ячеек «A» ( F12
) и «B» ( G12
), соответственно.
Третья формула должна исключать (игнорировать) самую высокую и самую низкую из семи самых последних цен и вычислять среднее из оставшихся пяти цен. Это идет в последнем столбце таблицы, начиная с ячейки «C» ( H12
).
Затем мне нужен комбинированный гистограмма с «типом» на горизонтальной оси и «ценой» на вертикальной. Мне нужна столбчатая диаграмма с накоплением, показывающая нижний диапазон (ячейка «A») и более высокий диапазон (ячейка «B»), а линейный график должен быть наложен на средние значения (ячейка «C»).
Я не мастер Excel, и я попробовал все учебные пособия по самопомощи, которые я могу решить. Я дошел до мысли, что это VLOOKUP
может быть полезно, но сейчас я в растерянности.
источник
Ответы:
Хорошо, ограничение в отношении нескольких продаж одного и того же типа в данный день, о котором говорил Скотт, сделало это возможным. Но это все еще довольно сложно. Использование 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 самых последних дат, и была ли конкретная продажа в эту дату для Типа = 1. Если оба эти условия выполняются,IF()
возвращается цена продажи из столбца B, и ложь в противном случае.Теперь, чтобы перечислить цены в таблице помощников от высокой к низкой, мы используем
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. Поскольку это формула массива, ее нужно вводить с помощью CTRLShiftEnter, а не просто 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}),""))
Я надеюсь, что это поможет вам, и я уверен, что вы можете получить график, который вы хотите, как только у вас есть эти данные.
Любые комментарии или предложения приветствуются.
источник
$A2:$A5000
, и т. Д.