Страницы: 1
RSS
Как данные колонки разделить на три равные части?
 
Дамы и господа! Всем привет!  
 
Помогите пожалуйста решить такую задачу:  
есть колонка с данными (числа) A1:A36,  
есть три результирующие ячейки B1, C1, D1  
нужно данные колонки разделить на три, примерно равные части, и просуммировать эти части в трех результирующих ячейках (каждая треть в своей ячейке B1, C1, D1).    
 
Спасибо!
 
Здравствуйте.  
Так что ли?  
=СУММ($A1:$A36)/3
 
Может так:
 
или так?
 
Простите меня за не понятно изложенную задачу.    
Числа из колонки A1:A36 нужно разложить по трем ячейкам (B1, C1, D1), неважно сколько ячеек из колонки A1:A36 и в какой последовательности попадет в сумму результирующей ячейки (B1, C1, D1), важно чтобы результирующие ячейки (B1, C1, D1) были между собой примерно равны.    
Важный момент: необходимо знать какие ячейки из колонки A1:A36 в какие результирующие ячейки попали (B1, C1, D1)  
 
Спасибо!
 
{quote}{login=Virt}{date=06.12.2010 01:02}{thema=}{post}Простите меня за не понятно изложенную задачу.    
Числа из колонки A1:A36 нужно разложить по трем ячейкам (B1, C1, D1), неважно сколько ячеек из колонки A1:A36 и в какой последовательности попадет в сумму результирующей ячейки (B1, C1, D1), важно чтобы результирующие ячейки (B1, C1, D1) были между собой примерно равны.    
Важный момент: необходимо знать какие ячейки из колонки A1:A36 в какие результирующие ячейки попали (B1, C1, D1)  
 
Спасибо!{/post}{/quote}  
а так?
 
кстати, данные можно и не сортировать, результат все равно нормальный
 
Мне понравилось :)
 
Как вариант - очередное значение "кладется" в ячейку с наименьшей накопленной суммой:
 
МСН, Вы волшебник! Вы превзошли все мои ожидания на 200%  
Скажите, а могу изменить колонку с A1:A36 на например A1:A50? Что мне нужно для этого сделать?  
 
Спасибо!
 
Оптимальное решение можно найти макросом.  
дабы не перебирать все возможные варианты в поисках оптимального, а их здесь 3^36 ~ 1,5Е+17 (даже если принять что за 1 секунду просчитывается 1 млн. вариантов, то перебор всех займет 5 тыс. лет :) )  
 
Алгоритм такой:  
1. распределяем данные по группам за один проход по массиву, как это сделано в post_181128.xls.  
2. затем производим обмен (swap) каждого элемента с каждым, если они принадлежат к разным группам, подсчитываем суммы по каждой группе, если в случае данного обмена результат стал лучше (снизилась величина среднеквадратичного отклонения), то сохраняем данный обмен, иначе возвращаем данные обратно.  
3. повторяем шаг 2 до тех пор, пока не закончатся обмены (можно ограничить количество обменных итераций)  
 
Т.к. я не силен в VBA, то на написание макроса у меня уйдет много времени. Хотя алгоритм не сложный (с ним то я справлюсь), сложности возникнуть с тем, как взять данные с листа, как их обратно туда закинуть.    
Если никто не возьмется, завтра напишу (самому хочется реализовать).
 
{quote}{login=Virt}{date=06.12.2010 02:11}{thema=}{post}Скажите, а могу изменить колонку с A1:A36 на например A1:A50? Что мне нужно для этого сделать?  
{/post}{/quote}  
во всех формулах где указаны диапазоны A5:A40/B5:B40 укажите нужный  
формулы в ячейках B5:B40 - идентичны, достаточно поправить в B5 и скопировать вниз
 
{quote}{login=Казанский}{date=06.12.2010 02:09}{thema=}{post}Как вариант - очередное значение "кладется" в ячейку с наименьшей накопленной суммой:{/post}{/quote}  
Хороший вариант, достаточно простой алгоритм.  
Если данные преварительно отсортировать по убыванию, то получится очень хороший результат
Страницы: 1
Наверх