Страницы: 1
RSS
АКБ в сводной таблице
 
Здравствуйте!  
Помогите, пожалуйста, отобразить активную клиентскую базу в сводной таблице по трем критериям:  
клиент сработал на этой неделе по данному поставщику через этого агента.  
В сводной таблице необходимо оперативно получать данные, например:  
с этим поставщиком сработало 7 клиентов на сумму 91 руб. на 35 неделе.  
 
Попробовал своими силами, пришлось в таблицу с данными вводить еще два столбца (выделил желтым), громоздить формулы, которые работают почти час (оригинальная таблица содержит 30 столбцов и 300 тысяч строк...).  
Существует ли более логичная формула и чтобы ограничится одним дополнительным столбцом "АКБ", потому, что силами сводной таблицы такие данные не вытащить?!
 
Не правильно пометил тему, вопрос не решен!
 
{quote}{login=AHKOP}{date=05.01.2012 03:40}{thema=АКБ в сводной таблице}{post}... клиент сработал на этой неделе по данному поставщику через этого агента... оригинальная таблица содержит 30 столбцов и 300 тысяч строк...{/post}{/quote}  
Вариант - XL, как вариант - Access?.. ;)  
ps если отказаться от "уникальных клиентов и агентов".
 
В том то все и дело, из сводной таблицы мы можем вытащить только количество раз, сколько сработали с данным поставщиком. Например если два клиента на 35 неделе сработали с поставщиком по три раза каждый, то в своде мы увидим сумму продаж и 6 сработавших раз, а нужно сумму продаж и два сработавших клиента. Просто если речь идет о 50 поставщиках и 1000 клиентах, тут нужен быстрый анализ: сколько клиентов и на какую общую сумму сработало на 35 неделе, на 36... Боюсь, без дополнительного столбца в таблице данных не обойтись... Вот только формулу бы упростить!  
Как продажник, пользуюсь в основном сводными таблицами и диаграммами, как самым легким и быстрым способом получения данных о продажах и их анализе. В Компании никто не смог помочь, думаю, многим пригодился бы данный способ оперативного получения АКБ!
 
{quote}{login=}{date=06.01.2012 09:23}{thema=Re: Re: АКБ в сводной таблице}{post}В том то все и дело, из сводной таблицы мы можем вытащить только количество раз, сколько сработали с данным поставщиком. Например если два клиента на 35 неделе сработали с поставщиком по три раза каждый, то в своде мы увидим сумму продаж и 6 сработавших раз, а нужно сумму продаж и два сработавших клиента...{/post}{/quote}  
Если XL-2010, то почему бы не делать вторую сводную на основе значений (!!!) первой?..
 
{quote}Если XL-2010, то почему бы не делать вторую сводную на основе значений (!!!) первой?..{/post}{/quote}  
Потому, что первую сводную придется сохранять, как значения (а это уже не сводная таблица) и как минимум первый столбец бывшей сводной ручками или по формуле протягивать значения! Вообщем никакой автоматизации...  
На работе XL-2007
 
Наверно много и сумбурно наговорил, упрощу свой вопрос.  
Первый столбец - список повторяющихся значений.  
Второй столбец - формула, которая проставляет 1, если находит новое значение, но только один раз. Если значение повторяется, то формула ставит 0.  
Формула есть, но возможно ли её упростить или скорее заменить, т.к. при списке в 300 тысяч строк она работает час...  
Файл прилагаю.
 
{quote}{login=}{date=09.01.2012 09:56}{thema=Re: Re: Re: Re: Re: АКБ в сводной таблице}{post}Наверно много и сумбурно наговорил, упрощу...  
...формула, которая проставляет 1, если находит новое значение, но только один раз. Если значение повторяется, то формула ставит 0...{/post}{/quote}  
И на что это надоть?.. По-другому извратиться с 300 тысячами (?!!) строк никак нельзя?..
 
Зачем это надо, писАл выше!  
По другому извратиться не получается...
 
Не знаю, сколько эта будет работать, но попробуйте:  
 
=--(СЧЁТЕСЛИ($A$2:A2;A2)=1)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Привет, Володь.  
Public Sub www()  
   Dim a(), i&  
   a = Range([a2], Cells(Rows.Count, 1).End(xlUp).Offset(, 1)).Value
   With CreateObject("scripting.dictionary")  
       For i = 1 To UBound(a)  
           If .exists(a(i, 1)) Then  
               a(i, 2) = 0  
           Else  
               .Add a(i, 1), 0: a(i, 2) = 1  
           End If  
       Next  
   End With  
   Range([a2], Cells(Rows.Count, 1).End(xlUp).Offset(, 1)).Value = a
End Sub
Я сам - дурнее всякого примера! ...
 
Так д.б. быстрей:  
Public Sub www()  
   Dim a(), i&  
   a = Range([a2], Cells(Rows.Count, 1).End(xlUp)).Value
   ReDim b(1 To UBound(a), 1 To 1)  
   With CreateObject("scripting.dictionary")  
       For i = 1 To UBound(a)  
           If Not .exists(a(i, 1)) Then .Add a(i, 1), 0: b(i, 1) = 1  
       Next  
   End With  
   [b2].Resize(i - 1, 1).Value = b
End Sub
Я сам - дурнее всякого примера! ...
 
Спасибо Большое!  
Формула работает еще дольше, чем моя, а вот макросы... ЗАЧЕТ!!!
 
{quote}{login=KukLP}{date=09.01.2012 10:52}{thema=}{post}Привет, Володь.  
Public Sub www()  
   Dim a(), i&  
   a = Range([a2], Cells(Rows.Count, 1).End(xlUp).Offset(, 1)).Value
   With CreateObject("scripting.dictionary")  
       For i = 1 To UBound(a)  
           If .exists(a(i, 1)) Then  
               a(i, 2) = 0  
           Else  
               .Add a(i, 1), 0: a(i, 2) = 1  
           End If  
       Next  
   End With  
   Range([a2], Cells(Rows.Count, 1).End(xlUp).Offset(, 1)).Value = a
End Sub{/post}{/quote}  
Макрос замечательно работает, но мне не хватает знаний, как сделать так, чтобы данные он считывал не со столбца А(столбец №1), а со столбца V(столбец №22) и результат вставлял в столбец АА(столбец №27). Хотя со вторым пунктом разобрался.  
Спасибо за помощь!
 
Public Sub АКБвторой()  
     
   Dim a(), i&  
   a = Range([v2], Cells(Rows.Count, 1).End(xlUp).Offset(, 5)).Value
   With CreateObject("scripting.dictionary")  
       For i = 1 To UBound(a)  
           If .exists(a(i, 22)) Then  
               a(i, 27) = 0  
           Else  
               .Add a(i, 22), 0: a(i, 27) = 1  
           End If  
       Next  
   End With  
   Range([v2], Cells(Rows.Count, 1).End(xlUp).Offset(, 5)).Value = a
End Sub  
Не работает. Что не так?
 
Public Sub АКБвторой()  
 
Dim a(), i&  
a = Range([v2], Cells(Rows.Count, 22).End(xlUp).Offset(, 5)).Value
With CreateObject("scripting.dictionary")  
For i = 1 To UBound(a)  
If .exists(a(i, 1)) Then  
a(i, 6) = 0  
Else  
.Add a(i, 1), 0: a(i, 6) = 1  
End If  
Next  
End With  
Range([v2], Cells(Rows.Count, 22).End(xlUp).Offset(, 5)).Value = a
End Sub
 
{quote}{login=Kuzmich}{date=13.01.2012 10:32}{thema=Re}{/quote}  
 
Всё Работает!  
Большое Спасибо!!!
Страницы: 1
Читают тему
Наверх