3

このようなデータのセットが与えられた場合:

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が統合され、表示される値はNoテーブル内のsの数ですか?

同僚の1人のためにこれを準備するように依頼され、最終的に以下の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

私はもともとコードなしでこの問題に取り組んでいましたが、少し試行錯誤した結果、このプロジェクトで1日を無駄にしないことが最善であると判断しました。試すことができると思いDCOUNTAましたが、スペースの無駄になるデータの複数の余分な行をプルする必要がありました。

DCOUNT基準の例:

Item1 Sel.    Item2 Sel.    Item3 Sel.    User
No                                        UserA
              No                          UserA
                            No            UserA
No                                        UserB
              No                          UserB
                            No            UserB

などなど。約25個のアイテムと約25人のユーザーがいるため、これは巨大なブロックになり、そのほとんどは手動で作成する必要があります。その時点で、とにかくすべてを手で数えることにしたほうがいいかもしれません。

、、、、およびのいくつかの組み合わせを使用することも考えましたがVLOOKUPすべてをカウントした結果を得ることができませんでした。常に最初に見つけた行をキャッチしました。HLOOKUPINDEXINDIRECTNo

VBAを使用せずにこの要約を生成する比較的簡単な方法があるかどうか疑問に思います。

4

1 に答える 1

6

SUMPRODUCT数式を使用すると、必要なことを簡単に実現できます。

添付のサンプルとスクリーンショットをご覧ください。

アイテム1とユーザー1の「いいえ」の番号を見つけるために、私が使用した式は次のとおりです。

=SUMPRODUCT(($A$2:$A$7=$B$11)*($C$2:$C$7="No"))

同様に、あなたは残りのためにそれをしなければなりません。

サンプルファイル

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

スナップショット

ここに画像の説明を入力してください

于 2012-08-15T21:33:27.757 に答える