Нужна помощь в упрощении или улучшении формулы взвешенного распределения в Excel (математика / Excel / программирование Noob) - PullRequest
0 голосов
/ 01 февраля 2020

Я получаю удовольствие от создания довольно обширного инвентаря в Google Sheets для моей коллекции торговых карточек. Я покупаю большинство своих предметов коллекционирования в лотах , что означает, что я плачу в общей сложности X долларов за Y карт разных ценностей (в отличие от покупки каждой карты в отдельности).

В моем В таблице есть столбец «Покупная цена», в котором я указываю цену, которую я заплатил за каждую карту. Если я куплю 1 лот из 10 карт, чтобы определить стоимость каждой из этих карт, вы просто поделите стоимость лота на количество карт в лоте. Поэтому, если бы я купил 1 лот из 10 карт на общую сумму 100 долларов, цена покупки каждой карты была бы равна 10 долларов. Достаточно просто, верно?

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

Здесь это формула:

=IFS(B2="C",D2*$B$15*G2/((D2*$B$15)+(E2*$B$16)+(F2*$B$17))/D2,
     B2="U",D2*$B$16*G2/((D2*$B$15)+(E2*$B$16)+(F2*$B$17))/D2,
     B2="R",D2*$B$17*G2/((D2*$B$15)+(E2*$B$16)+(F2*$B$17))/D2)

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

И если вы не хотите проверить , что , вот скриншот:

Screenshot of formula in action

Проблема:

Таким образом, формула работает именно так, как я хочу, чтобы она работала ЗА ИСКЛЮЧЕНИЕМ, когда в лоте 0 0 общих . Когда это происходит, я получаю ошибку # DIV / 0! , говорящую о том, что «Параметр функции DIVIDE 2 не может быть нулем». Я понимаю, почему это происходит, поскольку он не любит делить на 0 в первой строке, но я не понимаю, как это исправить.

Как я могу исправить ошибку DIV, или есть лучший способ сделать это, возможно, альтернативная формула или подход ? Я не программист и немного новичок в Excel.

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

Два предложения.

  1. Вставьте каждое деление в функцию IFERROR (), как показано ниже. Эта функция вернет ноль вместо ошибки. Вы можете заменить другой расчет для этого. Фактически, в зависимости от того, на каком уровне вы вводите IFERROR (охватывая только одно из трех вычислений или все три), вы можете включить IFS в другой IFS, который проверяет на нули. Если у вас больше нет делений на ноль, больше не будет необходимости в IFERROR. Таким образом, это становится вопросом эффективности формулы.

    = IFERROR (D2 * $ B $ 15 * G2 / ((D2 * $ B $ 15) + (E2 * $ B $ 16) + (F2 * $ B $ 17 )) / D2,0)

  2. Забудьте обо всем этом и найдите коммерчески логичное решение. Логика c говорит о том, что вы никогда не покупаете много, если в нем нет нужных вам вещей, а у продавца никогда не бывает много, в котором нет рубби sh. В конце концов вы получаете множество commons , что означает, что у вас их больше, чем вы когда-либо могли надеяться продать. Итак, какова их реальная, коммерческая ценность? Оцените ваши редкие и необычные карты индивидуально, а весь багаж - вовсе нет. Вы найдете результат более реалистичным c как для Commons , так и для Rare . Кстати, это то, что они делают с коллекциями марок или монет.

0 голосов
/ 01 февраля 2020

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

Ваша формула не читается, как вы можете видеть:

=IFS(B2="C",D2*$B$15*G2/((D2*$B$15)+(E2*$B$16)+(F2*$B$17))/D2,
     B2="U",D2*$B$16*G2/((D2*$B$15)+(E2*$B$16)+(F2*$B$17))/D2,
     B2="R",D2*$B$17*G2/((D2*$B$15)+(E2*$B$16)+(F2*$B$17))/D2)

Сначала я бы посоветовал вам создать новый столбец (вы всегда можете скрыть его ), I:I, который содержит следующую формулу (для I2):

=B2*G2/((D2*const_weigth_common)+(E2*const_weigth_uncommon)+(F2*const_weigth_rare))/D2

( И вы даете этому значимое имя заголовка)

Что касается имен для $B$15:$B$17, сделайте что-то вроде:

$B$15 : const_weigth_common
$B$16 : const_weigth_uncommon
$B$17 : const_weigth_rare

(Вы знаете, как использовать имена в Excel ?)

Таким образом, ваша формула становится такой:

=IFS(B2="C",I2 * const_weigth_common,
     B2="U",I2 * const_weigth_uncommon,
     B2="R",I2 * const_weigth_rare);

Что касается вашей ошибки: как упоминалось в другом ответе, это может быть решено с помощью =IF() формула, поэтому I2 становится:

=IF(D2<>0;...;_ERROR_VALUE); // up to you how to change your error value

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

0 голосов
/ 01 февраля 2020

Я не математик


Но я могу помочь вам с этим ...


На мой взгляд, Есть три школы мысли , и вам нужно выяснить , какая из них ваша:

  1. Программист - отлов ошибок # div / 0 весь день

  2. Пурист - есть только один ответ, и он не определен

  3. Прагматика c - график показывает результаты, приближающиеся к пределу


  • Я думаю, что программист опасно или неэффективно, или опасно неэффективно. Конечно, он может уловить ошибку, но что именно это делает? Я скажу вам точно, что это делает, это наносит помаду на свинью. Он буквально заменяет одну строку «# div / 0!» Другой строкой more aestheti c. Или он может сыграть вторую скрипку дьяволу и публично убить одного жука, которого все знали, как защищаться, защищаясь и создавая другого?

  • Я думаю, что пурист прав насчет одного Дело в том, что ответ такой, какой он есть, и не может быть ничем иным; но он также неправ. Точно известный теоретический ответ вполне может быть неопределенным, но где в реальном мире кто-нибудь когда-либо видел деление на ноль? Это математическая конструкция, подобная бесконечности, мы можем спокойно ее игнорировать. Не веришь мне? Что происходит, когда вы делите солнце на ноль? Go вперед, я буду ждать вашего ответа.

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