1

次のように、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

これにアプローチする最善の方法について何か考えはありますか?

4

2 に答える 2

2

以下のレイアウトを想定して、ソース マトリックスのコピーを作成します。

=IFERROR(RANK(B2,$B$2:$D$4),"")  

G2 で I4 に上下にコピーされます。このランキングの 2D バージョンから、複数の統合範囲 (「リバース ピボット」 - おそらくAlt+D、P) を持つピボットテーブルを作成します。Totals の交点をダブルクリックします。結果が以下のようにソース シートにコピーされて戻される場合 (便宜上)、=Q2&R2&": "&S2U2 を追加 (またはそれに応じて調整) し、それに合わせて下にコピーします。

SO18387948 の例

大規模なデータセットにはより適切かもしれません!

于 2013-08-22T19:27:17.777 に答える
0

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

次のような平らなテーブルが得られます。

ここに画像の説明を入力

次に、 と を使用CONCATENATERANKて、ペアとランクの列を取得します。

ここに画像の説明を入力

これが最終結果になります。

ここに画像の説明を入力

于 2013-08-22T19:19:17.833 に答える