Страницы: 1
RSS
Подсчет кол-ва ячеек с необычным условием
 
Доброго времени суток, уважаемые форумчане. Возник вопрос с которым я сам не справился и поэтому прошу помощи (если конечно задача решаемая), итак: имеется диапазон А1:А10 с данными, каждая ячейка имеет комментарий (у первых 5-ти ячеек один, у остальных другой, в реальном файле кол-во вариантов (имеется ввиду 5+5) будет произвольным), некоторые из ячеек диапазона пустые (но комментарий есть и у них). Требуется подсчитать кол-во пустых ячеек с определенным комментарием, т.е. в прилагаемом файле в ячейке С1 должно быть подсчитано кол-во пустых ячеек с комментарием "123", а именно 2. Для варианта подсчета ячеек с комментарием "321" формула должна выдать 1. Решение нужно формулой. Заранее спасибо всем откликнувшимся.
P.S. Для доступа к содержимому комментария используется функция пользователя, найденная на просторах сети:
Код
Function Get_Text_from_Comment(rCell As Range) 'доступ к информации комментария
    Application.Volatile True
    On Error Resume Next
    Get_Text_from_Comment = rCell.Comment.Text
End Function
пример использования функции в ячейке D1
 
Цитата
OlegO написал: Решение нужно формулой
Цитата
OlegO написал: Для доступа к содержимому комментария используется функция пользователя
В чем подвох?
Вы уже используете макросы (UDF), почему бы и окончательный подсчет не сделать так же?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, в реальном файле есть и макросы и формулы и в данном случае расчет идет формулой и эта задача только часть формулы, как решить все целиком на UDF я даже не представляю, в реальном файле подсчитать необходимую сумму, используя эту UDF, у меня получается, а вот раскинуть на n-ное кол-во объектов нет. Можно было бы конечно ввести доп. столбец, но в том то и дело что я пытаюсь избавиться от "лишних" с моей точки зрения столбцов. Так что решение крайне желательно без оных столбцов, а вот если нужно будет дополнительную UDF использовать для решения, так я только за ;)  
Изменено: OlegO - 26.06.2019 11:44:53
 
Для Вашего примера можно так
Код
Function СЧЁТЕСЛИКОММЕНТ(rCond As Range, iCond, iCmnt)
    Application.Volatile True
    Dim iCl As Range
    For Each iCl In rCond
        If Not iCl.Comment Is Nothing Then
            If iCl.Value = iCond And iCl.Comment.Text = iCmnt Then
                СЧЁТЕСЛИКОММЕНТ = СЧЁТЕСЛИКОММЕНТ + 1
            End If
        End If
    Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Здорово, Sanja, спасибо большое. UDF внутрь другой UDF вставил, вроде получил что хотел, буде проверять на реальном файле. Еще раз спасибо
 
Цитата
OlegO написал: UDF внутрь другой UDF вставил
Зачем?!  8-0  
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Зачем?!
Я имел ввиду что параметр iCmnt который Вы указали вручную (123) я получу, используя первоначальную UDF вот и все :)  
 
Цитата
OlegO написал: вот и все
А можно на этот 'наворот' вживую взглянуть? В файле-примере. Интересует использование на листе
Изменено: Sanja - 26.06.2019 12:08:55
Согласие есть продукт при полном непротивлении сторон
 
Пожалуйста, единственно я немного "локализовал" Вашу UDF :oops:  
 
Ну тогда по логике напрашивается продолжение
Код
Function CountIfComment(rCond As Range, iCond, rngCmnt As Range)
Application.Volatile True
Dim iCl As Range
For Each iCl In rCond
    If Not rngCmnt.Comment Is Nothing Then
        If iCl.Value = iCond And iCl.Comment.Text = rngCmnt.Comment.Text Then CountIfComment = CountIfComment + 1
    End If
Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
iCl.Comment.Text
Цитата
Sanja написал:
If Not iCl.Comment Is Nothing Then
Простите за то, что влезаю, но не пойму как получается, что указанная в цитате переменная не объявлена (остальные объявлены либо в скобках после названия UDF, либо отдельным Dim), но функция её понимает?
 
Переменная iCl объявлена в 3й строке и ей присвоен тип Range
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Переменная iCl объявлена в 3й строке и ей присвоен тип Range
Но тут же iCLComment. Или я чего-то не понимаю?
 
'Тут' iClточкаComment
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
'Тут' iClточкаComment
Мда, надо мне, видимо начинать носить очки. Спасибо большое.
Страницы: 1
Наверх