次のように、2次元のデータセットがあります。
A B C
A - 9 4
B 24 - 13
C 3 12 -
2 つのエンティティ間の関係を表します。次のようなランク付けされた値のリストを返したいと思います。
AB:4 AC:5 ば:1 BC:2 CA:6 CB:3
これにアプローチする最善の方法について何か考えはありますか?
次のように、2次元のデータセットがあります。
A B C
A - 9 4
B 24 - 13
C 3 12 -
2 つのエンティティ間の関係を表します。次のようなランク付けされた値のリストを返したいと思います。
AB:4 AC:5 ば:1 BC:2 CA:6 CB:3
これにアプローチする最善の方法について何か考えはありますか?
以下のレイアウトを想定して、ソース マトリックスのコピーを作成します。
=IFERROR(RANK(B2,$B$2:$D$4),"")
G2 で I4 に上下にコピーされます。このランキングの 2D バージョンから、複数の統合範囲 (「リバース ピボット」 - おそらくAlt+D、P) を持つピボットテーブルを作成します。Total
s の交点をダブルクリックします。結果が以下のようにソース シートにコピーされて戻される場合 (便宜上)、=Q2&R2&": "&S2
U2 を追加 (またはそれに応じて調整) し、それに合わせて下にコピーします。
大規模なデータセットにはより適切かもしれません!
VBA を使用して、集計テーブルからフラット テーブルを作成することもできます。CONCATENATE
それから、 と を使用して、数値に基づいてペアを並べ替えるのは簡単RANK
です。
これが開始テーブルであると仮定しましょう:
このピボット テーブルをフラット テーブルに変換する VBA コードを次に示します ( [開発] タブに移動 -> Visual Basic ->挿入->モジュール-> ここにコードをコピーして貼り付けます)。
次に、[実行] (緑色の再生記号)をクリックします。
Sub ReversePivotTable()
' Before running this, make sure you have a summary table with column headers.
' The output table will have three columns.
Dim SummaryTable As Range, OutputRange As Range
Dim OutRow As Long
Dim r As Long, c As Long
On Error Resume Next
Set SummaryTable = ActiveCell.CurrentRegion
With SummaryTable
r = Application.Match("Totals", Columns(1), False)
c = Application.Match("Total", Rows(1), False)
End With
Set SummaryTable = SummaryTable.Resize(r - 1, c - 1)
MsgBox SummaryTable.Address
If SummaryTable.Count = 1 Or SummaryTable.Rows.Count < 3 Then
MsgBox "Select a cell within the summary table.", vbCritical
Exit Sub
End If
SummaryTable.Select
Set OutputRange = Application.InputBox(prompt:="Select a cell for the 3-column output", Type:=8)
' Convert the range
OutRow = 2
Application.ScreenUpdating = False
OutputRange.Range("A1:C3") = Array("Column1", "Column2", "Column3")
For r = 2 To SummaryTable.Rows.Count
For c = 2 To SummaryTable.Columns.Count
OutputRange.Cells(OutRow, 1) = SummaryTable.Cells(r, 1)
OutputRange.Cells(OutRow, 2) = SummaryTable.Cells(1, c)
OutputRange.Cells(OutRow, 3) = SummaryTable.Cells(r, c)
OutputRange.Cells(OutRow, 3).NumberFormat = SummaryTable.Cells(r, c).NumberFormat
OutRow = OutRow + 1
Next c
Next r
End Sub
次のような平らなテーブルが得られます。
次に、 と を使用CONCATENATE
しRANK
て、ペアとランクの列を取得します。
これが最終結果になります。