Страницы: 1
RSS
Суммирование повторяющихся данных
 
День добрый.  
Мне нужно, чтоб уникальные значения суммировались.  
 
Бумага  2                            
Картон  3                          
Пленка  4                            
Бумага  5 , чтоб получилось так:  
                               Бумага 7  
                               Картон 3  
                               Пленка 4,  
при этом суммированное значение чтоб удалялось.  
В Access приходится сливать, а затем обратно в Ексел, а чтоб сразу в Екселе не умею.  
Помогите.
 
А сводная таблица не подходит?  
Только потом необходимо данные скопировать и вставить как значения, а так быстро и эффективно...
 
{quote}{login=Igor67}{date=02.09.2008 01:57}{thema=}{post}А сводная таблица не подходит?  
...{/post}{/quote}  
нет не подходит, там слишком много итоговых значений, которые мне не нужны
 
...к тому же там не два столбца, это я для краткости описал - два главных столбца.
 
А Вы правым мышом по итогам, и скрыть - работает на всем уровне... При копировании не входят.  
Ну так, межу прочим, по китайски сказано, по китайски сделано. Мы ведь не знаем Вашей задачи...
 
...да нет, сказано по-русски - это ты по-китайски просто понял.
 
Ну вот "обидки" начались и на ТЫ сразу...  
Нет что бы пригласить, познакомиться, за душевной беседой с рюмкой чая разъяснить суть проблемы...    
Ну или сократить басню и, хотя бы, суть проблемы описать...
 
может суммесли() подойдет
 
Посмотрите прикрепленный файл.    
А переходить на ты, не зная собеседника, это признак дурного тона.  
С уважением, Александр.
 
{quote}{login=Sh_Alex}{date=02.09.2008 04:49}{thema=Суммирование повторяющихся данных}{post}Посмотрите прикрепленный файл.    
{/post}{/quote}  
Небольшая поправка (спешка, наверное) - закрепить диапазоны  
СУММПРОИЗВ(($A$3:$A$9=D4)*($B$3:$B$9))
 
Александр, посылаю конкретный пример, т.к. тут действительно двумя словами не обойтись.
 
{quote}{login=Владимир}{date=03.09.2008 07:50}{thema=}{post}Александр, посылаю конкретный пример, т.к. тут действительно двумя словами не обойтись.{/post}{/quote}  
 
то есть тип данных для суммирования определяется характеристиками в нескольких столбцах в вашем случае это  
тип = вид_бумаги + плотность_бумаги  + ширина_бумаги  + длина_бумаги    
надо вывести в отдельную таблицу все уникальные типы бумаги (включая все столбцы данных определяющих тип) и произвести суммрования всех количественных данных для каждого уникального типа?  
 
Если в исходной таблице больше 1000 строк то надо сразу же переходить к макросу.  
Для таблицы такого размера как в примере можно обойтись и формулами. естественно что спомощью формул данные будут заноситься в новую таблицу, старая как источник данных сохраняется.
 
{quote}{login=Владимир}{date=03.09.2008 07:50}{thema=}{post}Александр, посылаю конкретный пример, т.к. тут действительно двумя словами не обойтись.{/post}{/quote}  
Владимир, посмотрите файл, проанализируйте формулу. В ней первые 4 составляющих принимают значение 1 или 0, последняя - это то что нужно суммировать.    
С уважением, Александр.
 
Александр, там еще нужно сгруппировать столбец А, что я и сделал  
глядя на Вашу формулу, правда в ячейке А22 ничего не появилось и при этом в столбцах Тонны и Листы получается ноль, а без группировки столбца А ответ получается верный.  
 
файл со своей редакцией
 
Владимир, Вы не разобрались с работой формулы. В ячейке А22 ничего не должно появиться, туда вставляется нужное значение из $A$2:$A$18.  
 
Суммируются значения в тех строках (($E$2:$E$18)), для которых выполняются все условия:    
($A$2:$A$18=$A$22)И($B$2:$B$18=$B$22И($C$2:$C$18=$C$22)И($D$2:$D$18=$D$22)И($F$2:$F$18=$F$22)
 
{quote}{login=vikttur}{date=03.09.2008 09:49}{thema=}{post} В ячейке А22 ничего не должно появиться...  
{/post}{/quote}  
vikttur, тогда это не решение для моей задачи.
 
вбиваем формулы массива в  дополнительные столбцы в первой строке таблицы  
протягиваем по размеру таблицы  
скрываем ненужные столбцы  
автофильтром скрываем ненужные строки  
на экране видим желаемый результат.  
 
естствнно можно и далее улучшать в сторону автоматизации ...    
с помощью приёмов данного сайта.
 
{quote}{login=Владимир}{date=03.09.2008 09:37}{thema=}{post}файл со своей редакцией{/post}{/quote}  
Вот Ваш файл с моей редакцией.  
С уважением, Александр.
 
влезу сюда со своим любимым ADO)))  
файл-пример может работать как с другими книгами, так и с самим собой, соответсвенно в окошке выбора файла нужно выбрать этот же файл
 
И все равно, по большому массиву данных быстро и удобно - сводная таблица. Можно вообще  создать файл для обработки с листом для данных и итоговой формой сводной. Потом только подставлять исходные и обновить данные сводной и все!  
Напомню что для скрытия Итогов по каждому параметру в строке  - достаточно сделать только в 1 раз, и все соответствующие значения будут скрыты.
 
{quote}{login=Артем}{date=03.09.2008 12:22}{thema=}{post}влезу сюда со своим любимым ADO)))  
файл-пример может работать как с другими книгами, так и с самим собой, соответсвенно в окошке выбора файла нужно выбрать этот же файл{/post}{/quote}  
 
Артём, не подскажете, а что ещё можно использовать в качестве таблицы данных кроме именнованного диапазона?  
 
то есть что и с каким синтаксисом может стоять вместо "рабочаяобласть" в вашем запросе?  
----  
oRS.Open "Select бумага,плт,шир,длн,Sum(Тонны),Единица,sum(Листы) from " & _  
       "РабочаяОбласть GROUP BY бумага,плт,шир,длн, Единица", oConn, adOpenStatic
 
Для обработки больших массивов информации лучше сводной таблицы ничего не знаю (верно для 90%-95%). Вопрос в том - насколько ею можешь пользоваться. Данная задача - как раз для сводной таблицы - решается просто и удобно.Чтобы диапозон исходной информации не приходилось постоянно добавлять - сразу делаем "с запасом"
 
Насколько я знаю, можно использовть неименнованные дипазоны  
прямо вот так, например A1:G18 без ковычек и скобочек. Можно определять этот дипазон через макрос, а потом соеденять его с запросом черз &    
Нельзя прямо использовать динамические диапазоны, я перевожу их в обычные
 
{quote}{login=}{date=03.09.2008 01:08}{thema=Re: Re: }{post}Насколько я знаю, можно использовть неименнованные дипазоны  
прямо вот так, например A1:G18 без ковычек и скобочек. Можно определять этот дипазон через макрос, а потом соеденять его с запросом черз &    
Нельзя прямо использовать динамические диапазоны, я перевожу их в обычные{/post}{/quote}  
 
то есть для динамического диапазоны или таблицы (listobject) нужно вначале получить их адрес как текст,  
и подставить его в текст запроса?  
Если да то дальнейших коментариев не треба.  
БОЛЬШОЕ СПАСИБО!
 
{quote}{login=dl}{date=03.09.2008 02:03}{thema=Re: Re: Re: }{post}{quote}{login=}{date=03.09.2008 01:08}{thema=Re: Re: }{post}Насколько я знаю, можно использовть неименнованные дипазоны  
прямо вот так, например A1:G18 без ковычек и скобочек. Можно определять этот дипазон через макрос, а потом соеденять его с запросом черз &    
Нельзя прямо использовать динамические диапазоны, я перевожу их в обычные{/post}{/quote}  
 
то есть для динамического диапазоны или таблицы (listobject) нужно вначале получить их адрес как текст,  
и подставить его в текст запроса?  
Если да то дальнейших коментариев не треба.  
БОЛЬШОЕ СПАСИБО!{/post}{/quote}  
 
Вообщем все так, но выход то всегда можно найти.  
Я в книге источнике на событие "сохранение" повесил макрос  
Range("РабочаяОбласть").name = "РабочаяОбласть2"  
Первый диапазон динамический, а второй соответсвенно уже нет. К нему то я и обращаюсь в запросе.
 
Sub sumtip()  
Dim ps1 As Long  
Dim ps2 As Long  
Dim uflag As Boolean  
 
ps1 = 2  
Do Until Cells(ps1, 1) = "": ps2 = ps1 + 1: Do Until Cells(ps2, 1) = "":  
uflag = True  
If Cells(ps1, 1) <> Cells(ps2, 1) Then  
uflag = False  
ElseIf Cells(ps1, 2) <> Cells(ps2, 2) Then  
uflag = False  
ElseIf Cells(ps1, 3) <> Cells(ps2, 3) Then  
uflag = False  
ElseIf Cells(ps1, 4) <> Cells(ps2, 4) Then  
uflag = False  
ElseIf Cells(ps1, 6) <> Cells(ps2, 6) Then  
uflag = False  
End If  
If uflag Then  
Cells(ps1, 5) = Cells(ps1, 5) + Cells(ps2, 5)  
Cells(ps1, 7) = Cells(ps1, 7) + Cells(ps2, 7)  
Cells(ps2, 1).EntireRow.Delete  
Else  
ps2 = ps2 + 1  
End If  
Loop: ps1 = ps1 + 1: Loop  
End Sub
Страницы: 1
Читают тему
Наверх