【问题标题】:How to transpose a column in excel relative to another?如何将excel中的一列相对于另一列转置?
【发布时间】:2016-05-24 14:58:17
【问题描述】:

有没有办法在 excel 中将一列相对于另一列转置。我想做的类似于 SAS 中的 Proc Transpose 或 R 中的重塑包。

A   1
A   2
B   1
B   2
B   4

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

A   1   2   
B   1   2   4

【问题讨论】:

  • 是的,您可以这样做,但它列出的第一种方式实际上对于 Excel 来说要好得多。这是过滤器、公式、数据透视表等的理想格式。我强烈建议保留原始的 2 列格式。
  • 没错,但我希望后者报告一些数字。有没有函数或公式可以做到这一点?
  • 我几天前刚刚回答了这个问题doing the opposite
  • 是否总是对第一列进行排序/分组?还有“A”可以出现的最大次数吗?
  • 是的,它将被排序或分组。我不回答第二部分。但不应该超过 10

标签: excel transpose


【解决方案1】:

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

在 D2 中放置:

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

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

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

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

它将拉出与A列对应的B列中的项目。将其复制到右侧。

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

奖金

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

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

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

警告

需要对数据进行分组。

概念证明:

【讨论】:

  • 好,我的就是一个很好的例子,它把公式放在一起,直到我得到我想要的。你的更简洁。
  • 有趣的是你应该提到这一点。我认为这是关于如何横向计数的第 4 或第 5 次迭代。我可能应该添加一个警告,它只适用于排序数据。现在我从放狗回来了,我想我会做一个最大列指示器 E1。
【解决方案2】:

这个公式会做你想做的事,我把“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)),"")

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

【讨论】:

  • 什么???硬编码15000000(虽然很合理)和硬编码列D也是如此? Scott 8) 今天感觉还行吗?
【解决方案3】:

对于 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列的数据不需要排序。

【讨论】:

  • 我实际上更喜欢 VBA 方法。我假设单元格 F3 是空白的,其中上面的公式方法最终使公式中没有显示任何内容。 VBA 代码还会自动适应以覆盖正确的列数。
  • @ForwardEd 谢谢............代码很简单,但是如果数据经常变化,宏也必须经常重新运行。跨度>
猜你喜欢
  • 1970-01-01
  • 2019-09-16
  • 2021-09-10
  • 1970-01-01
  • 2021-01-25
  • 2022-11-03
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多