【问题标题】:Doing a group sum in one excel cell (pivot, but don't want to use pivot)在一个 Excel 单元格中进行分组求和(枢轴,但不想使用枢轴)
【发布时间】:2018-07-27 09:11:15
【问题描述】:

我曾尝试使用 textjoin 函数来执行此操作,但无法完全弄清楚。我有以下动态范围:

Product Problem Type
A       Type1
A       Type2
A       Type1
A       Type1
B       Type2
B       Type2
B       Type3
C       Type3
C       Type1
C       Type2
D       Type3
D       Type3
E       Type1

我可以很容易地在单独的列中按 sum 进行分组(很像 SQL),按 Product 类型对 Type1 和 Type2 求和(不想对 Type3 求和)。我的目标是创建 一个 看起来像这样的单元格(不确定是否可以使用常规的 excel 公式)

“A-4、B-2、C2、E-1”。本质上,它会在一个单元格中找到唯一的产品类型并按产品对 Type1 和 Type2 求和。有可能吗?

这个公式会将不同的产品值返回到一个单元格中,每个字母旁边都有数字 4,因为 A 有 4 个 type1/type2.. 注意:如果我创建一个“总计”列并将 groupby 公式放在那里,我可以通过在公式末尾使用 B2:B14&D2:D14 而不是 sum(countif) 部分来使其工作。

  {=TEXTJOIN(", ", TRUE, IF(MATCH(B2:B14, B2:B14, 0)=MATCH(ROW(B2:B14), ROW(B2:B14)), B2:B14&SUM(COUNTIFS(B:B,B2,C:C,{"Type1","Type2"})), ""))}

【问题讨论】:

  • 听起来你实际上是想计算,而不是总和。
  • 我认为这很容易通过一个“帮助”列来辅助唯一性和计数后缀,但如果没有后缀会非常复杂。

标签: vba excel excel-formula


【解决方案1】:

假设产品跨越 Col A 并且问题跨越 Col B。 这是使用Col D 并在完成后将您的输出放在单元格D1 上。如果您在 Col D 中有数据,请更改代码以使用不同的列。

您需要调整第 3 行以反映您的工作表名称(将 Sheet3 替换为您的工作表名称并保留引号


Option Explicit

Sub Zero()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet3")
Dim Product As Range, MyString As String

Application.ScreenUpdating = False
    With ws
        .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row).AdvancedFilter xlFilterCopy, , .Range("D1"), True

            For Each Product In .Range("D2:D" & .Range("D" & .Rows.Count).End(xlUp).Row)
                MyString = MyString & Product & "-" & (Application.WorksheetFunction.CountIfs(.Range("A:A"), Product.Value, .Range("B:B"), "Type1") + _
                                                                              Application.WorksheetFunction.CountIfs(.Range("A:A"), Product.Value, .Range("B:B"), "Type2")) & ", "
            Next Product

        .Range("D1:D" & .Range("D" & .Rows.Count).End(xlUp).Row).ClearContents
        .Range("D1") = Left(MyString, Len(MyString) - 2)
    End With
Application.ScreenUpdating = True

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多