IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Обсуждение программ (http://www.imho.ws/forumdisplay.php?f=3)
-   -   Скорректировать значения в Exel (http://www.imho.ws/showthread.php?t=76257)

MadPautina 22.12.2004 19:43

Скорректировать значения в Exel
 
Такая вот проблема. Есть столбец данных, сумма которых равна какому то числу, нужно сделать так чтобы Exel подправил данные в этом столбце так чтобы сумма получилась скажем 0.
Пробовал подбором параметра но меняется толлько одна ячейка, а необходимо плавно скорректировать весь столбец.
Вот такая вот проблема, если кто поможет буду ОЧЕНЬ благодарен. :молись:

Clown 22.12.2004 20:49

То есть разницу в сумме надо равномерно распределить между ячейками или как? Какова логика? Допустим у тебя 10 клеток, со значениями, соответственно 9 единиц и одна двойка с минусом. Сумма = 7. Теперь ты хочешь привести сумму к "скажем 0". Каким образом?

MadPautina 23.12.2004 08:45

Вот например у меня столбец:
601,4974
-1075,5996
-759,8748
1291,5564
290,4434
-1150,588
-1079,0838
-1401,06
-1036,5246
2310,1554
2746,639
-603,0928
Его сумма равна 134,468. Нужно изменить значения в столбце так чтобы сумма была равна 0. Причем изменить значения не в !!!одной ячейке!!! а во всем столбце, какие-то числа уменьшить какие-то увеличить.

LightImage 23.12.2004 09:53

Напиши функцию на VBA
 
Вот текст программы:
Код:

Sub DoAjustRngSum()
    LI_AdjustRangeSum ActiveSheet.Range("A2:A13")
End Sub
Sub LI_AdjustRangeSum(rng As Range)
Dim S As Double, S_a As Double
Dim curc As Range
    S = 0
    S_a = 0
    For Each curc In rng
        S = S + curc.Value
        S_a = S_a + Abs(curc.Value)
    Next
    For Each curc In rng
        curc.Value = curc.Value - S * Abs(curc.Value) / S_a
    Next
End Sub

Добавь этот код в какой-нибудь модуль, скорректируй DoAjustRngSum(), выполни её и будет тебе счастье ;)
Например, твой столбец преобразуется этой функцией в
595,8594868
-1085,681335
-766,9972051
1279,450474
287,7210363
-1161,372611
-1089,198193
-1414,192317
-1046,24008
2288,502014
2720,894396
-608,7456671

MadPautina 23.12.2004 19:10

LightImage

Спасибо тебе огромное !!! :beer:
Ну просто жизнь спас :yees:

Но мне все же интересно, встроенными функциями это ни как сделать нельзя ???

4eburashka 24.12.2004 03:24

Честно сказать, не понятно, нужно ли тебе сохронять какуе то закономерность? Может можно просто от каждой клетке отнять средние орефметическое?
Использовать дополнительный столбик (если допустимо) и пользоватся фун:sum()/num;
Если не подходит, попробуй сформулировать вопрос поточней.

Clown 24.12.2004 04:01

Цитата:

Сообщение от 4eburashka
Честно сказать, не понятно, нужно ли тебе сохронять какуе то закономерность? Может можно просто от каждой клетке отнять средние орефметическое?
Использовать дополнительный столбик (если допустимо) и пользоватся фун:sum()/num;
Если не подходит, попробуй сформулировать вопрос поточней.

В том и проблема, что условия задачи не понятны. Сумму можно привести к 0 бесконечным количеством способов, включая простое обнуление всех значений.....

LightImage 24.12.2004 10:58

MadPautina
Оказалось можно, просто скрипт для меня было быстрее написать =)
Пусть твой столбец находится в ячейках B2:B13. Тогда в ячейку C1 вставляем такую формулу "=B2-ABS(B2)*СУММ($B$2:$B$13)/(СУММЕСЛИ($B$2:$B$13;">=0")-СУММЕСЛИ($B$2:$B$13;"<0"))" и заполняем ячейки C1:C13 этим значением


Часовой пояс GMT +4, время: 17:44.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.