代码之家  ›  专栏  ›  技术社区  ›  judo_ürgens

vlookup和sumif(每个项目的总利润)

  •  0
  • judo_ürgens  · 技术社区  · 2 年前

    我有一个10万行的数据集,我想总结每个独特项目的利润。 该表如下所示:

    table

    有没有一种结合vlookup和sumif的方式来获取每个项目的所有利润的选择?

    0 回复  |  直到 2 年前
        1
  •  2
  •   FaneDuru    2 年前

    使用 Dictinary 将很容易解决您的问题。请复制标准模块中的下一个代码并运行它。它会回来的 shDest 工作表。在示例代码中 它返回到下一张工作表中,在活动工作表之后 。但是相反 Set shDest = sh.Next 你可以 Set 任何工作表:

    Sub TotalProfit()
     Dim sh As Worksheet, shDest As Worksheet, lastRow As Long, arr, i As Long, dict As New Scripting.Dictionary
     
     Set sh = ActiveSheet 'use here the sheet you need, even not active
     Set shDest = sh.Next
     lastRow = sh.Range("C" & sh.rows.count).End(xlUp).Row
     arr = sh.Range("C2:N" & lastRow).Value2
     For i = 1 To UBound(arr)
        dict(arr(i, 1)) = dict(arr(i, 1)) + arr(i, 12)
     Next i
     shDest.Range("A1:B1").value = Array("ItemType", "Total Profit")
     With shDest.Range("A2")
        .Resize(dict.count, 1).value = Application.Transpose(dict.Keys)
        .Offset(0, 1).Resize(dict.count, 1).value = Application.Transpose(dict.Items)
     End With
    End Sub
    

    Application.Transpose() 有一些限制,但我认为你的努力不会超过这些限制。如果是这样的话,我可以很容易地调整代码以基于 Dictionary 键/项目。。。

        2
  •  2
  •   Fernando Barbosa    2 年前

    从函数开始 独特的 ,其中列出了没有重复项的项目。那你只需要 苏米夫 在新列表中。

    列表的公式为: =UNIQUE(Table13[Item Type])

    • 由于您使用的是表,因此可以通过其名称“Item Type”来引用该列,该名称位于我的文件的Table13中。我的意思是,“Table13[项目类型]”是您的范围。
    • 公式“溢出”单元格,只需将其写入一个单元格即可查看整个列表。

    现在,您只需要对每个项目求和。我唯一的项目列表在“G”列。 因此,我对第一项的公式是: =SUMIF(Table13[Item Type],G5,Table13[Total Profit])

    • 第一个参数是原始表上的项目列表。
    • 第二个是要与范围进行比较的值(与第一个参数进行比较)。
    • 第三个参数是值所在的位置。

    向下拖动公式,即可创建新表!


    最终结果如下。

    enter image description here

    我假设您使用的是Excel 365。如果您有较旧的Excel版本,则不能使用“unique”,因此我们应该使用更复杂的解决方案。