Пользовательская функция Countif возвращает значение #Value - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь создать функцию показателей vba, которая имеет критерии множественности в разных столбцах.Мне нужно, чтобы он подсчитывал только те ячейки в столбце E, которые имеют внутренний цвет, если соответствующая строка в столбце C имеет определенное текстовое значение.

По сути, это календарь отпусков, но мне нужно его подсчитать, кто ушел(обозначено цветом), но только если они имеют определенную квалификацию (обозначено текстом в столбце C). Например: Считайте ячейку E10 только в том случае, если C10 имеет значение "TL" и E10 имеет внутренний цвет Зеленый

Я пыталсямного разных кодов, но все они возвращают # ЗНАЧЕНИЕ!Ниже приведены примеры, которые я попробовал:

 Function countifs_by_QASO(Cl As Range, Ct As Variant, Dy As Range, clr As 
 Variant) As Variant
 Application.Volatile True

 Dim x As Long
 Dim Cert As Range
 Dim Day As Range
 Dim Level As Variant
 Dim criteria_color As Variant

 Set Cert = Range("C21:C101")
 Set Day = Range("E21:E101")
 criteria_color = criteria.Interior.color

 x = 0

 For Each Cert In Cl
     If Level = Ct Then
     x = x + 1
End If

countifs_by_QASO = x

End Function

Далее я попробовал:

 Function countifs_by_QASO(Cert As Range, Level As Variant, Day As Range, 
 color As Range) As Variant
     Application.Volatile True

 Dim y As Long
 Dim cel As Range
 Dim cel2 As Range

 criteria_color = criteria.Interior.color

 y = 0

 For Each cel In Day
     If cel.Interior.color = color.Interior.color Then
     y = y + 1
     End If
     Next

 For Each cel2 In Cert
     If cel = Level Then
     y = y + 0
     Else
     y = y - 1
     End If

 Next

 countifs_by_QASO = y

Наконец, я попытался включить здесь свойство Offset:

Function countifs_by_QASO(Day As Range, color As Range) As String
Application.Volatile True

 Dim y As String
 Dim cel As Range
 Dim Level As Range
 color = criteria.Interior.color
 Level = Range("C21:C101")
 y = 0

 For Each cel In Day
     If cel.Interior.color = color.Interior.color Then
             If cell.Offset(0, Level).Value = "QASO" Then
                 y = y + 1
             End If
     End If

 Next

 countifs_by_QASO = y

 End Function

Онивсе возвращают # Значение!что, я уверен, является отражением моей неопытности в VBA

При использовании формулы потребуется выполнить следующее:

шаг 1 - посмотрите вниз на свой столбец

шаг 2- если ячейка имеет заданный цвет интерьера, то

шаг 3 - смещение в той же строке в столбец C и

шаг 4 - если в этой ячейке указан текст, то

шаг 5 = количество +1

...