在Excel中汇总映射的值

我的情况如下:我有一个表格,其中有工作class次的代码,即:

John | 1 | 34 | 1 | 34 | Total: | 40 <---- Maria| 1 | 1 | 1 | 1 | Total: | 32 <----I need a formula for this last cell 

这些代码中的每一个都在另一个表中设置了小时数。

 Codes | Hours 1 | 8 34 | 12 

我需要根据代码计算总工时。 我已经find了使用INDEX和MATCH将值映射到另一个表的方法,但是当我尝试对很多行执行操作时,它只是给出了映射的第一个代码,而不是具有映射值的数组。

我认为将有助于下面的自定义VBAfunction(请参阅下面的示例)。 使用方法如下:

 =multipleMatch(range of cells to look in, range of cells to INDEX, range of cells to MATCH) 

如果您有任何问题,请告诉我。

 Function multipleMatch(inputRng As Range, indexRng As Range, matchRng As Range) As Double On Error GoTo errhandle Dim runTot As Double runTot = 0 Dim cll As Range Dim mtch As Long For Each cll In inputRng If Not IsError(cll.Value) Then On Error Resume Next mtch = Application.WorksheetFunction.Match(cll.Value, matchRng, 0) On Error GoTo errhandle If mtch <> 0 Then runTot = indexRng(mtch) + runTot End If End If mtch = 0 Next cll multipleMatch = runTot Exit Function errhandle: multipleMatch = CVErr(xlErrValue) Exit Function End Function 

例

是否有一个原因,你有上表向右走? 在这里有John吗?

如果上表是实际工作class次的logging,最下面一个是class次代码的默认工作时间,并且您计划有更多的人,那么我可以build议下面的解决scheme,它也将重新组织您的表位,并利用Excel表,这将允许您避免必须维护公式和范围:

  1. select你的底部表格范围,按下Ctrl + T将它变成蓝色的表格。
  2. 重命名列只是为了这个例子工作 – 你可以在这里完成步骤后重命名。
  3. 你的“上”表被换位,有3列名,换码,小时。
  4. 做同样的事情:select范围,按ctrl + t,在popup窗口中勾选“表头”。 重命名列在图片中。
  5. 在表2的Hours Column的第一个单元格中(如图),粘贴这个公式并按Enter。 (现在是将列名更改为您的首选项的好时机)

    = SUMIF(表1 [class次代码],[@ [class次代码]],表1 [默认时数])

  6. 创build表#2旁边的数据透视表,或者在任何位置创build数据透视表。

如果将数据添加到表1和2,公式将自动在表2中更新,并且透视表来源。 刷新数据透视表以查看更新的总计。

这就是它的样子。

我希望这是你试图达到的目标。

为例 如果你愿意的话,你可以把转换代码放到数据透视表的“列”区域中,如下图所示,并通过代码和grandtotal分解:

PIC2

***** PS请记住标记最有用的答案为“答案”,如果其他答案或评论有帮助,请投票