このようなデータのセットが与えられた場合:
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
、すべてをカウントした結果を得ることができませんでした。常に最初に見つけた行をキャッチしました。HLOOKUP
INDEX
INDIRECT
No
VBAを使用せずにこの要約を生成する比較的簡単な方法があるかどうか疑問に思います。