1

我有一组二维数据,如下所示:

      A     B     C

 A    -     9     4

 B    24    -     13

 C    3     12    -

它表示两个实体之间的关系。我想返回这些值的列表,例如:

AB:4
交流电:5
巴:1
公元前:2
加州: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

你会得到一个像这样的平面表:

在此处输入图像描述

然后,使用CONCATENATEandRANK得到一列对和等级。

在此处输入图像描述

这将是最终结果:

在此处输入图像描述

于 2013-08-22T19:19:17.833 回答