Как я могу распределить итоговое значение в процентах, где каждая ячейка является целым числом, и они суммируются точно до первоначального итога? - PullRequest
2 голосов
/ 31 декабря 2011
      Date
Nov-11     Dec-11
50         102

   Percent
0          0
0          34
34         33
33         33
33         0

  Apportion
0          0
0          35
17         34
16         34
16         0

     Sum
49         103

5 процентов в первом столбце соответствуют разбиению 50 на целые части в 5 ячейках под заголовком распределения. Результаты были получены в результате простого раунда (x *%, 0). Я хочу, чтобы все значения ниже суммировались до 50 точно в первом столбце. Это можно сделать, изменив любое количество ненулевых значений в разделе «Раскладка».

Если это можно сделать с помощью формул, я не смог понять, как это сделать. Все, что я пробую, является круговой ссылкой. Проблема в том, что любой процент может быть равен 0, поэтому я не могу просто создать контейнер, который учитывает недополнение / переполнение.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Это первый раз, когда я задал вопрос о SO. Я не могу прикрепить изображение, поэтому я попытался нарисовать таблицу выше с кодом.

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Это другой способ достижения вашей цели.

Это показывает внешний вид листа, за исключением того, что (1) столбцы B и D будут скрыты и (2) значения не будут выровнены, как япоказал им.

     |A         |B         |C         |D         |
 1   |Date      |          |          |          |
 2   |Nov-11    |          |Dec-11    |          |
 3   |50        |          |102       |          |
 4   |          |          |          |          |
 5   |Percent   |          |Percent   |          |
 6   |0         |          |0         |          |
 7   |0         |          |34        |          |
 8   |34        |          |33        |          |
 9   |33        |          |33        |          |
10   |33        |          |0         |          |
11   |          |          |          |          |
12   |Apportion |          |Apportion |          | 
13   |0         |0.00      |0         |0.00      |
14   |0         |0.00      |35        |0.32      |
15   |17        |0.00      |33        |-0.66     |
16   |17        |0.50      |34        |0.34      |
17   |16        |          |0         |          |
18   |          |          |          |          |
19   |Sum       |          |Sum       |          |
20   |          |          |          |          |
21   |50        |          |102       |          |

Следующие ячейки содержат показанные формулы:

A13  =ROUND(IF(A6=0,0,A$3*A6/100)-B12,0)
A14  =ROUND(IF(A7=0,0,A$3*A7/100)-B13,0)
A15  =ROUND(IF(A8=0,0,A$3*A8/100)-B14,0)
A16  =ROUND(IF(A9=0,0,A$3*A9/100)-B15,0)
A17  =ROUND(IF(A10=0,0,A$3*A10/100)-B16,0)
A21  =SUM(A13:A17)
B13  =A13-IF(A6=0,0,A$3*A6/100)
B14  =A14-IF(A7=0,0,A$3*A7/100)
B15  =A15-IF(A8=0,0,A$3*A8/100)
B16  =A16-IF(A9=0,0,A$3*A9/100)

Формулы должны быть напечатаны в A13 и B13 и затем скопированы.Примечание B17 не нуждается в формуле, но на B17 нет ссылки, поэтому не имеет значения, если бы она имела формулу.

Скопируйте A13: от B17 до C13: D17

B13 содержит сумму, которая быладобавлен в A13, чтобы сделать его целым числом.B13 вычитается из A14 до округления A14.И так далее вниз по колонне.В результате все округления используются в последующих рядах.

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

0 голосов
/ 31 декабря 2011

Вот решение, которое отрегулирует пропорцию для последнего ненулевого процента.

На основе макета данных следующим образом:
Сумма Тагета в A1
Проценты в A5:A9
Одна ячейка после диапазона процентов должна быть пустой (A10)
Соотношение в A12:A16

Формула для диапазона распределения (для ячейки A12, затем скопировать внизТакже может быть скопировано)

=IF(AND(SUM(A6:A$10)=0,A5>0),A$2-SUM(A$11:A11),ROUND(A$2*(A5%),0))

Как это работает:

  1. IF(AND(... определяет, является ли ячейка последним ненулевым процентом, суммируя проценты нижетекущий.Диапазон Sum расширяет одну ячейку за пределы диапазона Процент, чтобы он работал для последней строки.
  2. Если IF истинно, рассчитайте утверждение как Target - Sum(Rows Above).Диапазон Sum расширяет одну ячейку выше диапазона Процентов, чтобы он работал для первой строки.
  3. Если IF имеет значение false, рассчитайте распределение как округленный процент
...