Страницы: 1
RSS
Количество работников, получивших зарплату
 
Здравствуйте. Помогите составить формулу.
Нужно посчитать количество работников (уникальных работников, т.к. они могут дублироваться в списке), которые получили зарплату (если чей-то доход равен 0, то не учитывать).
Файл приложил.
 
Код
=СУММПРОИЗВ((B2:B6>0)/СЧЁТЕСЛИ(A2:A6;A2:A6))
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
=СУММПРОИЗВ((B2:B6>0)/СЧЁТЕСЛИ(A2:A6;A2:A6))
Если, например, в 1-ой строке Иванову поставить доход 0,то формула выдает 2,5 человек. Некорректно. Это возможно подправить?
 
Код
=СУММПРОИЗВ((СУММЕСЛИ(A2:A6;A2:A6;B2:B6)>0)/СЧЁТЕСЛИ(A2:A6;A2:A6))
Соблюдение правил форума не освобождает от модераторского произвола
 
Макросом
Код
Sub Zarplata()
Dim dicObj As Object
Dim i&
  Range("E2:F" & Cells(Rows.Count, "A").End(xlUp).Row).ClearContents
Set dicObj = CreateObject("scripting.dictionary")
  For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
    dicObj.Item(CStr(Cells(i, "A"))) = dicObj.Item(CStr(Cells(i, "A"))) + Cells(i, "B")
  Next i
   Range("E2").Resize(dicObj.Count, 2) = Application.Transpose(Array(dicObj.Keys, dicObj.Items))
  For i = Cells(Rows.Count, "E").End(xlUp).Row To 2 Step -1
    If Cells(i, "F") = 0 Then Range("E" & i & ":F" & i).Delete shift:=xlUp
  Next
  Range("F1") = WorksheetFunction.CountA(Range("E2:E" & Cells(Rows.Count, "E").End(xlUp).Row))
End Sub
 
Цитата
buchlotnik написал:
=СУММПРОИЗВ((СУММЕСЛИ(A2:A6;A2:A6;B2:B6)>0)/СЧЁТЕСЛИ(A2:A6;A2:A6))
Благодарю, эта формула помогла.
 
ну на словарях и UDF можно:
Код
Function zarplata%(kto As Range, skoka As Range)
    Application.Volatile
    Dim i%, s$
    Set dic = CreateObject("Scripting.Dictionary")
    For i = 1 To kto.Rows.Count
        s = kto(i)
                If skoka(i) > 0 And Not dic.Exists(s) Then dic.Add s, 1
    Next
    zarplata = dic.Count
End Function
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх