在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
答案 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)<>""))
数据
结果
注意
实际上并不需要行查找,因为A2:A11中的名称列表与I2:I11中的名称列表具有相同的顺序,但是我假设情况并非总是如此。
答案 1 :(得分:1)
我无法通过一个普通公式来解决这个问题!因此,这是我对VBA的尝试,需要进行一些设置。
您将必须创建一个母版表,该母版表将跟踪项目分配。
现在考虑到您的每周工作表都处于这种布局
您可以运行此代码 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),则表示他们已经在一周内一起工作了。