Excel 当值出现不同次数时,如何转换数据?

Excel 当值出现不同次数时,如何转换数据?,excel,excel-formula,transpose,Excel,Excel Formula,Transpose,我想转置2列(a:B)中的数据。例如,在下面的输入中,A列中的值A、B、C和D分别出现3次 有了这个输入(输入1),我使用这个公式,得到了正确的转置,如下图所示: =INDEX($B$1:$B$12,4*ROWS(D$2:D2)+COLUMNS($D2:D2)-4) 输入1 +---+----+ | A | 2 | +---+----+ | B | 3 | +---+----+ | C | 4 | +---+----+ | D | 1 | +---+----+ | A | 6 | +

我想转置2列(a:B)中的数据。例如,在下面的输入中,A列中的值A、B、C和D分别出现3次

有了这个输入(输入1),我使用这个公式,得到了正确的转置,如下图所示:

=INDEX($B$1:$B$12,4*ROWS(D$2:D2)+COLUMNS($D2:D2)-4)
输入1

+---+----+
| A |  2 |
+---+----+
| B |  3 |
+---+----+
| C |  4 |
+---+----+
| D |  1 |
+---+----+
| A |  6 |
+---+----+
| B | 12 |
+---+----+
| C |  4 |
+---+----+
| D | 76 |
+---+----+
| A |  1 |
+---+----+
| B |  2 |
+---+----+
| C | 37 |
+---+----+
| D |  9 |
+---+----+

但如果输入改变(input2)的方式使A、B出现的次数少于C和D,则我的输出是不正确的

输入2

+---+----+
| A |  2 |
+---+----+
| B |  3 |
+---+----+
| C |  4 |
+---+----+
| D |  1 |
+---+----+
| C |  4 |
+---+----+
| D | 76 |
+---+----+
| C | 37 |
+---+----+
| D |  9 |
+---+----+
| A | 47 |
+---+----+
| B |  2 |
+---+----+
| C | 37 |
+---+----+
| D |  9 |
+---+----+
我在下图中显示了不正确的输出和预期的输出。


提前感谢您的帮助。

这里有一个相当简单的方法,它基于到目前为止已填充的单元格数:

=IF(INDEX($A:$A,COUNT($D$1:$G1)+COUNT($C2:C2)+1)=D$1,
INDEX($B:$B,COUNT($D$1:$G1)+COUNT($C2:C2)+1),"")
从D2开始向下和横向复制。假设C列中有一个空白列

如果您想让它更具动态性,但又想让它适用于早期版本的Excel而不是Microsoft 365,那么很遗憾,它会变得有点难看。您可以使用一种常规方法,按字母顺序列出a列中的唯一值,以获取标题:

=IFERROR(INDEX($A:$A, MATCH(SMALL(IF((COUNTIF(C$1:$C1, $A$1:INDEX($A:$A,COUNTA($A:$A)))=0), COUNTIF($A$1:INDEX($A:$A,COUNTA($A:$A)), "<"&$A$1:INDEX($A:$A,COUNTA($A:$A))), ""), 1), COUNTIF($A$1:INDEX($A:$A,COUNTA($A:$A)), "<"&$A$1:INDEX($A:$A,COUNTA($A:$A))), 0)),"")

=IFERROR(索引($A:$A,MATCH(小)(如果($COUNTIF(C$1:$C1,$A$1:INDEX($A:$A,COUNTA:$A)))=0),COUNTIF($A$1:INDEX($A:$A,COUNTA:$A)),“是否会出现一个数据集只存在一个字母的情况,例如,只有a、B、C、D?每次是什么定义了集合的结尾?集合的结尾将是字母D。但将其视为从a到D的块,后跟一个或多个“不完整”从C到D的块,然后再次出现从a到D的完整块,以此类推。我希望让senseThanks Tom感谢您的帮助和时间。它与我显示的输入一起工作。但是有没有办法使公式更通用?我的意思是,使用更多的值。例如,我的实际数据在a列中有10个不同的值(比如从Val1到Val10)在A列中。在这个问题中,我只展示了一个小的有代表性的模式示例,以便于理解。您可以看到它就像Val1到Val10之间的块,后跟一个或多个“不完整”从Val6到Val10的块,然后再次显示从Val1到Val10的完整块,依此类推。我希望Microsoft 365中的senseWell您可以使用Unique和Transpose来获取列标题,然后您必须创建范围(如$d$1:$G$1)动态。我认为这是可以做到的-稍后会看一看。另一个问题是,是否可以用溢出公式做到-这似乎更难。我知道溢出公式仅在office 365中可用。如果对您来说很容易就可以了,即使我也需要在配备Excel 2016的机器中使用它。
=IF(AND(INDEX($A:$A,COUNT($D$1:$Z1)+COUNT($C2:C2)+1)=D$1,D$1<>""),
INDEX($B:$B,COUNT($D$1:$Z1)+COUNT($C2:C2)+1),"")