VLOOKUP с подстановочными знаками и найти N-й вхождение? - PullRequest
1 голос
/ 04 июля 2019

Я настраиваю Google Sheet, который будет рассчитывать наиболее эффективный размер покупки определенных сельскохозяйственных ресурсов (удобрения, химикаты и т. Д.). Я установил данные о ценах на отдельной вкладке с отдельной строкой для каждого входного имени + размера.

Чтобы было проще для пользователя, я бы хотел указать только имя для ввода, количество галлонов на акр и акров, а затем иметь формулу, в которой указана общая стоимость и наиболее эффективная покупка (объем, если> X галлонов, X # 250-галлонных контейнеров + X 55 бочек и т. Как я могу использовать входное имя плюс подстановочный знак, чтобы найти подходящий размер покупки?

https://docs.google.com/spreadsheets/d/1bMOPuk2qhmVuJT7vE_ni3KFxfcgKvwTwkM4p50xQF_0/edit?usp=sharing

Я пытался:

=ArrayFormula(iferror(INDEX('Data (Current)'!H2:H,SMALL(IF($A2&"*"='Data (Current)'!A2:A,ROW('Data (Current)'!A2:A)-1),1))))

... но он возвращает пустое значение, поэтому я предполагаю, что ссылка $A2&"*" на имя ввода не работает должным образом. Когда я заменяю его на строку, найденную на вкладке «Данные (текущая)», она работает нормально.

=ArrayFormula(iferror(INDEX('Data (Current)'!H2:H,SMALL(IF($A2&"*"='Data (Current)'!A2:A,ROW('Data (Current)'!A2:A)-1),1))))

Я ожидал, что вывод будет наименьшим значением (в данном случае я думаю, что это 5). Затем, когда я изменю последнее число на 2 или 3, он найдет следующее наименьшее значение, в данном случае 55 или 250. Затем я могу использовать простые формулы, чтобы взаимодействовать с этим и закончить электронную таблицу.

К сожалению, фактический результат - ничто, или "".

1 Ответ

0 голосов
/ 04 июля 2019

Извините, если это не то, что вы ищете, так как у меня возникли проблемы с пониманием вашего вопроса.

Предположим, что вы хотите по сути это:

Я хочу купить Y количество пункт .

Я могу купить пункт по более низким ценам, если я покупаю в больших количествах, хотя иногда они имеют минимальное количество заказа.

Какая самая оптимальная комбинация вариантов, которые я должен использовать, чтобы минимизировать цену, которую я плачу?

Я не уверен, есть ли простое решение для этого только в Google Sheets. Это может привести к большему проникновению на территорию скриптов приложений.

Однако это не значит, что это не невозможно. Вышеупомянутое решение «грубой силы» с итеративным подходом для продукта «Хелатный кальций»: https://docs.google.com/spreadsheets/d/1YSBiSx0IMr4T0R11Dqb-tqOhH4AOTTAWeH2yQfT4X5w

  1. Сначала перечислите данные стандартным образом. Это включает в себя предоставление каждому продукту чего-то простого для поиска. Например, на вкладке Данные (текущие) я добавил 3 столбца:
    • Product Common Name - используется для того, чтобы можно было легко найти все предметы разного количества без использования подстановочных знаков.
    • Галлоны - намного проще разобрать данные, если они явно выложены.
    • Минимальный объем заказа галлонов - это ваш порог для Bulk. Я установил для хелатного кальция произвольно 20 000 галлонов.
  2. Данные здесь упорядочены наименее эффективны в первую очередь. Как вы это сделаете, будет зависеть от вас. В этом случае я отсортировал по вашему листу параметр Розничная стоимость за унцию , сначала самый высокий. Это исключает какие-либо догадки о том, какой из вариантов наиболее эффективен, поскольку вы можете просто просмотреть свои варианты по порядку. Примечание: способ, которым я выложил формулы, будет работать только в том случае, если одни и те же продукты находятся непосредственно рядом друг с другом. Это не будет работать, если между ними есть другие продукты.
  3. На вкладке Field Level Tool стандартизируйте свои входы в единицу галлонов. Я делаю это в столбце Total Gallons Needed (я умножаю что-либо на «GAL» с 1 и «QUART» на 0,25).
  4. Для каждого товара определите номера строк, где начинается и заканчивается товар. Это отмечено столбцами L ( Наименьший эффективный индекс ) и M ( Самый эффективный индекс ). Я получил эти результаты с помощью функции MATCH.
  5. Установите итерации от 0 до N-1 . На этом листе я настроил N = 5 итераций, что означает, что он может проходить только 5 различных вариантов одного и того же продукта. Поскольку хелатный кальций имеет только 4 различных варианта (5 галлонов, 30 галлонов, 250 галлонов, навалом), 5 для этого продукта более чем достаточно. Если у вас есть продукты с большим количеством опций, вы можете захотеть сделать больше итераций.
    • Итерации находятся на правой стороне Инструмент уровня поля вкладка.
    • В вашем случае, возможно, вы захотите поместить его на другую вкладку, поскольку место, куда я его поместил, делает файл очень грязным.
  6. На каждой итерации я выполняю следующие шаги:
    • Для выполнения - Сколько галлонов еще нужно приобрести на этой итерации?
    • ThisIndex - Какой номер строки этой итерации? Это определяется Наиболее эффективным индексом - Номер итерации . Помните, что, поскольку мы отсортировали в порядке возрастания эффективности, это означает, что итерация начинается с наиболее эффективного варианта, который она может найти первой. Существует проверка, чтобы убедиться, что она выводит значение только в том случае, если оно находится в диапазоне [ Наименьший эффективный индекс , Самый эффективный индекс ]. В противном случае он будет пустым во избежание просчетов при внедрении в другой продукт на вкладке Данные (текущие) .
    • Розничная цена , Минимальные галлы , Галлоны за заказ - Простое извлечение данных для легкого использования в итерации, используя INDEX (и косвенно, MATCH по ThisIndex ).
    • Order - Эта формула выполняет несколько действий, описанных ниже:
      • Проверяет, есть ли ещеостается верным выбором продукта на этой итерации.Это делается путем проверки того, существует ли ThisIndex .Если продукт не существует, то он будет обнулен.Это достигается с помощью функции IF.
      • Она определит, есть ли минимальный порог, который должен быть достигнут, чтобы приобрести этот выбор.Например, на 0-й итерации вы видите, что минимальное количество составляет 20 000 галлонов.Если количество To Fulfill больше или равно пороговому значению ИЛИ пороговое значение отсутствует, тогда количество покупок определяется в этом столбце.Математика состоит в том, чтобы просто разделить сумму To Fulfill на сумму галлонов в заказе , чтобы определить количество заказов данного конкретного продукта.Если есть пороговое значение, но сумма To Fulfill не соответствует ему, то эта итерация пропускается со значением заказа 0 .
      • Если элемент ужепри наименее эффективном выборе ( ThisIndex == Наименее эффективный индекс ) он будет выполнять функцию CEILING, чтобы гарантировать выполнение заказа.Если нет, он будет выполнять функцию FLOOR.Это потому, что вы не можете заказать 3,5 единицы товара, поэтому их нужно округлить либо в большую, либо в меньшую сторону.
    • Расход - Это просто Заказ, умноженное на Розничную цену , или сколько денег вы потратите в этой итерации.
    • Осталось - Сколько продукта осталось не выполненным в концеэтой итерации, которая будет использоваться как для выполнения для следующей итерации.
    • Примечание. Если вы видите формулы вида =IF(ThisIndex, [calculations_here],), это просто проверка, чтобы аннулироватьвычисление, если ThisIndex недопустимо.
  7. Скопируйте итерации столько раз, сколько вы хотите направо.Что-то хорошее, что нужно сделать, это заставить итерации выполнить CEILING для самой последней, чтобы гарантировать, что вы никогда не купите недостаточно.
  8. Создайте читаемую пользователем строку для предложения о покупке.Вы можете увидеть это в столбце Предлагаемая покупка .
  9. Рассчитать Купленных галлонов с простым SUMPRODUCT по всем итерациям.
  10. Рассчитатьобщие расходы с простой SUM за все итерации.

Я надеюсь, что это то, что вы искали.В любом случае, это, по крайней мере, забавное упражнение о том, как сильно вы можете злоупотреблять Листами.;)

...