4

У меня есть данные, как это:Минимизация различий в указанном количестве групп промежуточного итога

A  B C D  
Book1 1 49 
     2 37 
     3 31 
     4 46 163 
     5 35 
     6 47 
     7 40 
     8 38 160 
     9 45 
     10 25 
     11 38 
     12 29 
     13 25 
     14 18 180 

где столбец D содержит подытоги для (переменной) числа элементов из столбца C.

То, что я пытаюсь Выполнение, учитывая заданное количество этих промежуточных итогов, должно быть максимально приближенным к их среднему (что может быть справедливо для небольшой выборки, но не обязательно в более крупной таблице). Другими словами, если общее количество элементов в столбце C составляет 15 000, и я хочу разделить их на 90 частей, тогда каждая из этих частей должна быть как можно ближе к 166.67 (15 000/90).

Порядок ColumnC не может быть изменен.

Как это можно сделать? (VBA будет работать для меня, если потребности.)

+0

@pnuts: да, потому что я должен придерживаться порядка книг (столбец А) и глав (столбец B). – user438

+0

** проблема, на которую можно ответить в нескольких параграфах **? - в этом случае достаточно нескольких строк *. – pnuts

+0

Это очень интересная вариация на значительную и часто возникающую проблему [knackack problem] (http://en.wikipedia.org/wiki/Knapsack_problem), и я подозреваю, что это будет серьезная задача для решения именно с VBA. Проблема была определена узко, и ОП не требовал кода без публикации каких-либо. Ответ (вроде!) Возможен без VBA. Если вы недостаточно квалифицированы, чтобы судить, слишком ли широка ** ПОЖАЛУЙСТА, НЕ ВМЕШАЙТЕ **. – pnuts

ответ

2

Это только приблизительная:

=IF(SUM(C$2:C2)-SUM(D$1:D1)>SUM(C:C)/3,SUM(C$2:C2)-SUM(D$1:D1),"") 

но для абсолютного минимума VBA или тому подобное может потребоваться. Замените 3 на необходимое количество деталей.

+1

Спасибо (будет upvote, как только у меня будет достаточно репутации). Я не против ответа VBA, если это будет более точно. – user438

+0

На самом деле, попробовав это (с 3 замененными на 90) на моем наборе данных, не совсем трюк - я получаю 83 промежуточных итога. – user438

+0

Это потому, что для простоты каждый (но последний) промежуточный итог заканчивается, когда эта группа превышает требуемое среднее значение. т.е. каждая группа равна или больше требуемого среднего, и, в конце концов, осталось меньше значений C. Может быть немного уточнено с '-x', чтобы удовлетворить (методом проб и ошибок или Solver) до'> '. – pnuts

Смежные вопросы