如何相对于另一列转置 excel 中的列?

How to transpose a column in excel relative to another?

在 excel 中,有没有一种方法可以将一列相对于另一列进行转置。我想做的类似于 SAS 中的 Proc Transpose 或 R 中的重塑包。

A   1
A   2
B   1
B   2
B   4

我希望它在excel中转换成这种格式。

A   1   2   
B   1   2   4

这个公式会做你想要的,我把"A"放在D1里,"B"放在D2里。把这个放在E1里,然后往下复制:

=IFERROR(INDEX($B:$B,IF(COLUMN(A:A)>COUNTIF($A:$A,$D1),1500000,MATCH($D1,$A:$A,0)+COLUMN(A:A)-1)),"")

确保上下复制足以覆盖所有数据。

使用 AB 列中的数据,试试这个简短的宏:

Sub ReOrganizer()
    Dim i As Long, j As Long, Na As Long, K As Long
    Dim s As String, rc As Long, Nd As Long

    rc = Rows.Count
    Range("A:A").Copy Range("D:D")
    Range("D:D").RemoveDuplicates Columns:=1, Header:=xlNo
    Na = Cells(rc, "A").End(xlUp).Row
    Nd = Cells(rc, "D").End(xlUp).Row

    For i = 1 To Nd
        s = Cells(i, "D").Value
        K = 5
        For j = 1 To Na
            If s = Cells(j, "A").Value Then
                Cells(i, K).Value = Cells(j, "B").Value
                K = K + 1
            End If
        Next j
    Next i
End Sub

注意:

  • A列的数据不需要排序。

一种可能的解决方案如下。说的有点绕,我刚睡醒,头上的雾还没有散去。

在 D2 中放置这个:

=IFERROR(INDEX($A:$A,MATCH(0,INDEX(COUNTIF($D:D1,$A:$A),0,0),0)),"")

它将从 A 列生成一个唯一的项目列表

然后在 E2 列中使用以下内容:

=IF(COUNTIF($A:$A,$D2)>=COLUMN(A:A),INDEX($B:$B,MATCH($D2,$A:$A,0)+COLUMN(A:A)-1),"")

它将拉取与A列相对应的B列中的项目。将其复制到右侧,直到您需要为止。

这两个公式都可以复制到你需要的地方。

奖金

将以下内容放入 E1。这是一个数组公式,所以当您完成公式时不要按回车键,而是按 CTRL+SHFT+ENTER。这也是为什么这些公式有时也被称为 CSE 公式的原因。

=MAX(COUNTIF($A:$A,D2:D3))&" Columns are required"
or
=MAX(COUNTIF(A1:A5,A1:A5))&" Columns are required"
'Thanks to Scott Craner for the second formula here

当公式栏中的公式周围出现 {} 时,您将知道您输入正确。您不能手动添加这些 {}。

警告

需要对数据进行分组。

概念验证: