【发布时间】:2012-08-12 05:20:37
【问题描述】:
给定一组这样的数据:
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
有没有一种方法可以使用内置的 Excel 工具、函数或公式来生成这样的输出
Item UserA UserB UserC
Item1 1 0 0
Item2 1 1 1
Item3 0 2 0
Items 和Users 在哪里合并,呈现的值是表中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
我最初试图在没有代码的情况下解决这个问题,但经过一些试验和错误后,我决定最好不要在这个项目上浪费我的一整天。我想我可以试试DCOUNTA,但这需要我提取多行额外的数据,这会浪费空间:
DCOUNT 条件示例:
Item1 Sel. Item2 Sel. Item3 Sel. User
No UserA
No UserA
No UserA
No UserB
No UserB
No UserB
等等等等。大约有 25 个项目和大约 25 个用户,这将是一个巨大的块,其中大部分都必须手动创建。到那时,我还不如手动计算所有东西。
我还考虑过使用VLOOKUP、HLOOKUP、INDEX 和INDIRECT 的组合,但我永远无法得到一个将Nos 计数的结果ALL ;它总是抓住它找到的第一行。
我想知道是否有一种相对简单的方法来生成此摘要不使用使用 VBA。
【问题讨论】:
-
我不确定我是否理解。你是如何得到如上图所示的输出的?
-
没关系 :) 你试过 sumproduct 公式吗?
-
@SiddharthRout 根据数据表,
UserA有 3 个条目。在这些条目中,Item1 Sel.有 1 个No,Item2 Sel.有 1 个,Item3 Sel.没有。因此,UserA的输出是1, 1, 0。相反,在Item1 Sel.的所有条目中,只有一个是No,恰好是UserA。因此,Item1的输出是1, 0, 0。如果您还有什么需要我澄清的,请告诉我! -
@SiddharthRout 不,我不熟悉该功能。 (非常快速地)查看有关它的应用程序帮助,我不确定我将如何获得我正在寻找的东西。
-
这是你想要的吗? wikisend.com/download/352772/untitled.png 已使用公式生成输出
标签: vba excel excel-2003 pivot-table