Excel:计算员工一周工作一次的频率吗?

时间:2018-12-13 08:25:30

标签: excel vlookup countif

在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 |

现在我不知道有些人在一起工作的频率更高,或者在最坏的情况下永远都不会。
目标是通过移动不同的项目来平衡在每个项目上共同努力的人们。 例如。鲍勃与詹妮弗(Bob&Jennifer)不会每次都在一起工作(最坏的情况下计划)。

输出:

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 countifs ,但这是一个巨大的公式。 excel中是否有一个简单的解决方案来计算两个相同的表达式(例如Project-A),然后计算+1?鲍勃和汤姆在同一个项目上工作?

谢谢

br

2 个答案:

答案 0 :(得分:2)

这只是跨越每对员工的行,并查看项目名称在同一天匹配多少次:

=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中的名称列表具有相同的顺序,但是我假设情况并非总是如此。

答案 1 :(得分:1)

我无法通过一个普通公式来解决这个问题!因此,这是我对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