没有VBA的复杂的类似枢轴的摘要

Gaf*_*ffi 3 excel vba pivot-table excel-2003 excel-vba

给出一组这样的数据:

User    Item1 Desc.    Item1 Sel.    Item2 Desc.    Item2 Sel.    Item3 Desc.    Item3 Sel.
UserA   Item 1         Yes           Item 2         Yes           Item 3         Yes
UserB   Item 1         Yes           Item 2         No            Item 3         No
UserB   Item 1         Yes           Item 2         Yes           Item 3         No
UserC   Item 1         Yes           Item 2         No            Item 3         Yes
UserA   Item 1         No            Item 2         Yes           Item 3         Yes
UserA   Item 1         Yes           Item 2         No            Item 3         Yes
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用内置的Excel工具,函数或公式来生成这样的输出

Item    UserA    UserB    UserC
Item1   1        0        0
Item2   1        1        1
Item3   0        2        0
Run Code Online (Sandbox Code Playgroud)

如果双方ItemsUsers得到巩固,并呈现值的计数NoS中的表内?

我被要求为我的一位同事准备这个,最后在下面创建了VBA功能.这很快,很脏,而且需要重构,当然,它确实得到了我所需要的东西.

Sub SummarizeData()

Dim wksSrc As Worksheet
Dim dicAssoc As Object
Dim l As Long
Dim i As Integer
Dim rngCell As Range
Dim v As Variant

    Set dicAssoc = CreateObject("Scripting.Dictionary")
    With ThisWorkbook.Sheets.Add()
        .Name = "Results"
        Set wksSrc = ThisWorkbook.Sheets("data")
        For l = 2 To 184
            If Not dicAssoc.exists(wksSrc.Range("C" & l).Value) Then
                dicAssoc.Add wksSrc.Range("C" & l).Value, wksSrc.Range("C" & l).Value
            End If
        Next l
        .Range("A1:A26").Value = ThisWorkbook.Sheets("Sheet5").Range("A1:A26").Value
        l = 2
        For Each v In dicAssoc.items
            .Cells(1, l).Value = v
            l = l + 1
        Next v
        For Each rngCell In wksSrc.Range("A2:CT184").Cells
            For l = 2 To 26
                If rngCell.Value = .Cells(l, 1).Value Then
                    If rngCell.Offset(0, 1).Value = "No" Then
                        For i = 2 To 148
                            If .Cells(1, i).Value = wksSrc.Range("C" & rngCell.Row).Value Then
                                .Cells(l, i).Value = .Cells(l, i).Value + 1
                            End If
                        Next i
                    End If
                End If
            Next l
        Next rngCell
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

我最初试图在没有代码的情况下解决这个问题,但经过一些试验和错误后,决定最好不要浪费我一整天的时间来完成这个项目.我以为我可以尝试DCOUNTA,但这需要我多拉多行数据而浪费空间:

DCOUNT 标准示例:

Item1 Sel.    Item2 Sel.    Item3 Sel.    User
No                                        UserA
              No                          UserA
                            No            UserA
No                                        UserB
              No                          UserB
                            No            UserB
Run Code Online (Sandbox Code Playgroud)

等等等等.有大约25个项目和大约25个用户,这将是一个巨大的块,其中大部分必须手动创建.那时候,我不妨用手去计算一切.

我也想过用的一些组合VLOOKUP,HLOOKUP,INDEX,和INDIRECT,但我永远无法得到所计数结果所有NoS; 它总是抓住它找到的第一条线.

我想知道是否有一种相对简单的方法来生成此摘要而不使用VBA.

Sid*_*out 6

使用SUMPRODUCTFormula 可以轻松实现您想要的效果.

请参阅随附的示例和屏幕截图.

要查找项目1和用户1的"否"编号,我使用的公式是

=SUMPRODUCT(($A$2:$A$7=$B$11)*($C$2:$C$7="No"))
Run Code Online (Sandbox Code Playgroud)

同样,你必须做其余的事情.

样本文件:

http://wikisend.com/download/725440/Gaffi.xlsx

快照:

在此输入图像描述