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

有没有办法在Excel中相对于另一个转置列。 我正在尝试做什么类似于SAS中的Proc Transpose或R中的reshape软件包。

A 1 A 2 B 1 B 2 B 4 

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

 A 1 2 B 1 2 4 

一个可能的解决scheme如下。 如果有点复杂的话,我只是醒了,头脑里的雾还没有清除。

在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),"") 

它将拉列B中与列A相对应的项目。只要您需要,就将其向右复制。

这两个公式可以被复制下来,只要你需要去。

奖金

在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 

在公式栏中的公式附近出现{}时,您将会知道您input的内容是正确的。 您无法手动添加这些{}。

警告

数据需要分组。

概念validation:

在这里输入图像说明

这个公式会做你想做的,我把D1放在“A”和D2放在“B”里。 把它放在E1中,并上下复制:

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

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

在这里输入图像说明

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

 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列中的数据不需要sorting。