Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2015, 13:11   #1
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Вопрос Подсчет уникальных значений по условию

Помогите, пожалуйста, посчитать количество ассортимента товаров по условию встречался ли он ранее в столбце "B" при условии что значение в столбце "U" пустое (товар есть).
Голову сломал и циклами, потом коллекцией пробовал, запутался и уже совсем расстроился что самому сделать не получается, теперь прошу помощи у Вас!

Код:
Sub coll()

 '   Dim MyCollection As New Collection, i As Long

    j = 2
    While Not IsEmpty(Sheets("RRO").Cells(j, 2).Value)
        If Sheets("RRR").Cells(j, "U").Value = "" Then ' если пусто - товар есть
 '           MyCollection.Add Item:=Sheets("RRR").Cells(j, "B").Value
 
 ' Здесь нужно определить встечалось ли значения (код товара)
 '  в Sheets("RRR").Cells(j, "B").Value ранее и прибавить в tov
 '  т.е. считаются уникальніе коды товаров для определения
 '  количества ассортимента товара
     tov = tov + 1
            
        End If

        j = j + 1

    Wend
End Sub
xamillion вне форума Ответить с цитированием
Старый 27.03.2015, 13:18   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
if worksheetfunction.countif(range(cells(2,2), cells(j,2)), cells(j,2))=1 then tov = tov+1
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.03.2015, 16:53   #3
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:
if worksheetfunction.countif(range(cells(2,2), cells(j,2)), cells(j,2))=1 then tov = tov+1
спасибо... так у меня получилось...
но тут без условия (значение в столбце "U" пустое), т.е. уникальная запись выбирается в строках с пустыми ячейками в столбце "U",
а так получается он смотрит во всех ячейках - в этом то и сложность...
xamillion вне форума Ответить с цитированием
Старый 27.03.2015, 17:15   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
if worksheetfunction.SUMPRODUCT((range(cells(2,2), cells(j,2)) = cells(j,2))_
*(range(cells(2,2), cells(j,2)) = ""))=1 then tov = tov+1
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.04.2015, 22:29   #5
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

пишет ошибку -Type mismatch... подумал, что в описании диапазона чего-то не так... пробовал даже так...
Код:
      If Application.Evaluate("SUMPRODUCT((" & Range(Cells(2, 2), Cells(j, 2)).Address = Cells(j, 2) & ")*(" & Range(Cells(2, "U"), Cells(j, "U")).Address = "" & "))" = 1) Then
           tov = tov + 1
Может чего попроще есть? Не было интернета... как без кислорода... Удастся попробую файл прикрепить...
P.S. за СУММПРОИЗВ спасибо - функция огонь, только разобраться до конца нужно... буду крутить...
xamillion вне форума Ответить с цитированием
Старый 01.04.2015, 23:07   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если в коллекцию добавляете без ключа - оно примет всех! Т.е. со всеми повторами, так уникальных не посчитаете. Добавляйте с ключём, отключив ошибки.
А я обычно словарь использую, типа так:
Код:
Sub coll()

    Dim j As Long, tov As Long

    With CreateObject("scripting.dictionary"): .comparemode = 1

        j = 2
        While Not IsEmpty(Sheets("RRO").Cells(j, 2).Value)
            If Sheets("RRR").Cells(j, "U").Value = "" Then .Item(Sheets("RRR").Cells(j, "B").Value) = 0&
            j = j + 1
        Wend
        tov = .Count

    End With

    MsgBox tov
End Sub
Это если не на Маке.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.04.2015, 18:53   #7
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Если в коллекцию добавляете без ключа - оно примет всех! Т.е. со всеми повторами, так уникальных не посчитаете. Добавляйте с ключём, отключив ошибки.
А я обычно словарь использую, типа так:
...
Это если не на Маке.
Hugo121 спасибо, работает.
IgorGO прав, но перефразирую немного: Программисты - это люди, решающие проблемы, о существовании которых многие и не подозревали (а некоторые даже и создавали), бесконечным количеством методов, которых Вы не понимаете (а некоторым и не дано)...
стремлюсь к пониманию... спасибо за поддержку в стремлениях абсолютно незнакомым юзерам (от лица всех юзверей форума)
с SUMPRODUCT тоже хочу разобраться, разберусь - отпишусь, может кому и пригодиться...
xamillion вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет уникальных значений из произвольных диапазонов по критерию Tidus Microsoft Office Excel 2 13.07.2014 14:37
Подсчет уникальных значений из нескольких диапазонов Tidus Microsoft Office Excel 6 04.07.2014 20:53
Подсчет уникальных в дате strannick Microsoft Office Excel 15 03.03.2013 18:59
Не работает подсчет уникальных значений AllenJ Microsoft Office Excel 16 13.10.2012 17:29
подсчет уникальных ячеек с небольшими но... mr.null Microsoft Office Excel 17 21.06.2011 09:21