Excel: Посчитайте, как часто сотрудники работают вместе в неделю? - PullRequest
0 голосов
/ 13 декабря 2018

в Excel я пытался подсчитать сотрудников, работающих вместе над проектом (например, Project-A) за целую неделю.10 разных людей работают вместе на основе графика ниже.Каждый день двое работают над одним проектом, на следующий день над другим.

Employee | Monday    | Tuesday   | Wednesday | Thursday  | Friday    | Saturday  | Sund.
Bob      | Project-A | Project-C | Project-B | Project-C |           |           |
Jennifer | Project-B | Project-D | Project-A | Project-D |           | Project-C |
Tom      |           | Project-B | Project-C | Project-A | Project-A | Project-B |
Bill     | Project-D |           |           | Project-B | Project-C | Project-A |
Susan    | Project-C | Project-A |           |           | Project-B | Project-D |
Cathy    | Project-C | Project-A | Project-C | Project-A |           |           |
Jack     | Project-B | Project-C | Project-B | Project-B |           | Project-D |
Kate     |           | Project-B | Project-A | Project-D | Project-A | Project-C |
Anne     | Project-D |           |           | Project-C | Project-B | Project-A |
George   | Project-A | Project-D |           |           | Project-C | Project-B |

Теперь я не знаю, работают ли некоторые люди чаще вместе или в худшем случае никогда.
Цель состоит в том, чтобы сбалансировать людей, работающих вместе над каждым проектом, путем равного перемещения различных проектов. Например, Боб и Дженнифер не должны работать вместе каждый раз (наихудшее планирование).

Вывод:

Counts working together:
         | Bob      | Jennifer | Tom      | Bill    | Susan    | Cathy
Bob      |-         | 0        | 0        | 0       | 0        | 0        
Jennifer | 0        |-         | 0        | 0       | 0        | 0 
Tom      | 0        | 0        | -        | 0       | 0        | 2
Bill     | 0        | 0        | 0        | -       | 0        | 0
Susan    | 0        | 0        | 0        | 0       | -        | 2
Cathy    | 0        | 0        | 2        | 0       | 2        | -

Пробовал с vlookup или , указывает , но это огромная, огромная формула.Есть ли в Excel простое решение для подсчета двух одинаковых выражений (например, Project-A), а затем подсчитать +1, если, например, Боб и Том работают над одним проектом?

спасибо,

br

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Это просто просматривает строки для каждой пары сотрудников и показывает, сколько раз имена проектов совпадают в один и тот же день:

=SUMPRODUCT((INDEX($B$2:$G$11,MATCH($I2,$I$2:$I$11,0),0)=INDEX($B$2:$G$11,MATCH(J$1,$J$1:$S$1,0),0))
*(INDEX($B$2:$G$11,MATCH($I2,$I$2:$I$11,0),0)<>""))

Данные

enter image description here

Результаты

enter image description here

Примечание

Поиск строк на самом деле не нужен, потому что список имен в A2: A11 находится в том же порядке, что и список имен в I2: I11, но я предполагаю, что это не всегда так.

0 голосов
/ 13 декабря 2018

Я не мог понять это с помощью обычной формулы!Итак, вот моя попытка с VBA, которая требует немного настройки.

Вам нужно будет создать мастер-лист, который будет отслеживать распределение по проектам.

enter image description here

Теперь, когда ваш недельный лист находится в этом макете

enter image description here

Вы можете запустить этот код eui

Sub eqi()
Dim temp As String
Dim i As Integer
Dim j As Integer
Dim k As Integer

With Sheets("weekly")

For k = 1 To 4 Step 1
    For i = 2 To 8 Step 1
        For j = 2 To 11 Step 1
        If .Cells(j, i).Value = Sheets("master").Cells(1, 3 + k).Value Then
        temp = temp + .Cells(j, 1).Value
        End If
        Next j
            If Not temp = "" Then
                Call Findcombination(temp, k)
            End If
        temp = ""
    Next i
Next k

End With
End Sub

Sub Findcombination(temp As String, k As Integer)
Dim rFound As Range
    On Error Resume Next
    With Sheets("master")
        Set rFound = .Columns(1).Find(What:=temp, After:=.Cells(2, 1), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        rFound.Offset(, k + 2).Value = rFound.Offset(, k + 2).Value + 1
        On Error GoTo 0
        If Not rFound Is Nothing Then Application.Goto rFound, True
    End With
End Sub

Как только вы запустите код, он заполнит выделенную комбинацию проектами на 1, в идеале у вас должно быть 1 везде.Если вы запустите код и получите значение 2, то это означает, что они уже работали вместе над одним и тем же проектом раньше.

Если вы не хотите, чтобы это делалось по проектам, просто выполните суммирование в столбце H мастералист, если их больше 1, они уже работали вместе на неделе.

enter image description here

...