Sumif& Vlookup组合

时间:2015-01-16 17:06:09

标签: excel sum vlookup

我正在尝试执行以下操作,但我无法找出vlookup和sumif的正确顺序。

我应该首先概述一下我所拥有的东西。在sheet1上,我在A列中有一个ID列表(1-60ish,有一些变化),每个ID在B列中都有一个质量(以千克为单位)。根据一组标准,已定义,一些群众彼此相关,需要加以总结。它们如何相关是在sheet2上作为矩阵的轮廓。所有的ID都沿着第一列和最上面的列,以及它们相关的位置,因此应该总结," Y"放在相应的单元格中。最后在sheet3中,我再次在A列中列出了ID列表,我想在sheet2上的矩阵中查找ID所在的行,并将sheet1中的质量求和,其中有一个&# 34; Y"在矩阵中。

例如(如屏幕截图所示),sheet3的B列中的公式在sheet2(显示)的C列中查找ID 26,以识别哪些ID应该求和(用" Y"并且与第3行中的ID有关,以计算组合质量。需要从sheet1求和的质量与ID 23,25,26相关。因此所需的输出是质量23,25,26的总和。

我附上了截图,以便更清楚。

Mass Matrix

我希望有人可以提供帮助!

3 个答案:

答案 0 :(得分:0)

UNTESTED(可能值得您阅读mvce),但请尝试:

=SUMIF(INDIRECT("Sheet2!"&MATCH(VLOOKUP(A4,Sheet1!A:B,2,0),Sheet2!A:A,0)&":"&MATCH(VLOOKUP(A4,Sheet1!A:B,2,0),Sheet2!A:A,0)),"Y",Sheet2!1:1)

答案 1 :(得分:0)

使用VBA。没看到没有标签。这是未经测试的,因为我没有你的矩阵可以使用。

<强>设定:

  • 这取决于Sheet3上列出的“Masses”具有相同的顺序,并且与Sheet2的行号相同。
  • 将此子目录放在一个模块中。

会发生什么:

  1. 初始化变量,工作表名称,最后一行等
  2. 按行循环播放第3页,保留插入总和的位置
  3. 遍历Sheet2上的列,搜索“Y”
  4. 如果是“Y”,则从该列的第3行获取tempMass
  5. 按行循环播放Sheet1,搜索tempMass
  6. 如果找到匹配,请将质量添加到tempSum
  7. 对Sheet2上的每一列重复3-6
  8. 在Sheet3当前行上设置值,将B列设置为tempSum
  9. 重复2-9
  10. <强>代码:

    Sub SumMasses()
    
    Dim lastRow1 As Long, lastRow2 As Long, lastRow3 As Long, lastCol As Long
    Dim s1Row As Long, s2Row As Long, s3Row As Long, lCol As Long
    Dim s1 As String, s2 As String, s3 As String, tempMass As String
    Dim tempSum As Double
    
    s1 = "Sheet1"       'Define Sheet names here
    s2 = "Sheet2"
    s3 = "Sheet3"
    
    lastRow1 = Sheets(s1).Range("A" & rows.count).End(xlUp).row
    lastRow2 = Sheets(s2).Range("A" & rows.count).End(xlUp).row
    lastRow3 = Sheets(s3).Range("A" & rows.count).End(xlUp).row
    lastCol = Sheets(s2).Cells(3, Columns.count).End(xlToLeft).column  'Get last Column from matrix on Sheet 2, Row 3
    
        For s3Row = 4 To lastRow3
            tempSum = 0
    
            'Loop through columns on Matrix to find "Y"
            For lCol = 4 To lastCol
                If Sheets(s2).Cells(s3Row, lCol) = "Y" Then
                    tempMass = Sheets(s2).Cells(3, lCol)        'Get Mass from row 3 above match
    
                    'Loop through Sheet 1 to find Mass to add to sum
                    For s1Row = 4 To lastRow1
                        If Sheets(s1).Cells(s1Row, "A") = tempMass Then
                            tempSum = Sheets(s1).Cells(s1Row, "B")
                        End If
                    Next s1Row
                End If
            Next lCol   'Advance through the columns
    
            Sheets(s3).Cells(s3Row, "B") = tempSum      'Set sum on Sheet 3
    
        Next s3Row      'Proceed to the next Mass on Sheet3
    
    End Sub
    

答案 2 :(得分:0)

调整范围以适应:

=SUMPRODUCT(SUMIF(Sheet1!$A$2:$A$31,INDEX((INDEX(Sheet2!$D$4:$AG$33,MATCH(Sheet3!A2,Sheet2!$C$4:$C$33,0),0)="Y")*(Sheet2!$D$3:$AG$3)+1,)-1,Sheet1!$B$2:$B$31))