我在Excel中有以下矩阵:
3列: A,B,C
第1行: a b c
第2行: d e f
第3行: ghi
我需要的是一个包含所有这些值的列。结果看起来应该是这样的:
一
B'/ P>
C
d
ë
˚F
克
ħ
我
TRANSPOSE功能不适用于该情况。我尝试了INDIRECT功能,但没有找到解决方案。我更愿意使用标准Excel公式而不是makro来处理它。
有什么想法吗?
答案 0 :(得分:6)
说我们有:
在 E1 中输入:
=INDEX($A$1:$C$3,ROUNDUP(ROW()/3,0),IF(MOD(ROW(),3)=0,3,MOD(ROW(),3)))
并复制以获取:
使用类似的公式,您可以将任何二维表映射到单个行或单个列。将单个列或行映射到表中同样容易。
答案 1 :(得分:1)
上面的答案非常好,但恕我直言,Chip Pearson在这里(http://www.cpearson.com/excel/TableToColumn.aspx)提供的解决方案是最优秀的,因为它立即/自动:
1)自行确定Row / Col delim值,并立即用于矩形,例如:上面一个必须为num Cols明确输入3,为num Rows明确输入3,并且还必须弄清楚哪个是哪个。鉴于Pearson的解决方案会自动执行此操作(例如,上面的rmf评论/关注)。
2)Pearson为Col-ordered和Row-ordered提供了两种变体。
答案 2 :(得分:1)
第2项已经涵盖了非常笼统的内容
Excel: Formulas for converting data among column / row / matrix:
目标范围的顶部单元格(例如$H$1
)应包含
=INDEX($A$1:$C$3,INT((ROW()-ROW($H$1))/3)+1,MOD(ROW()-ROW($H$1),3)+1)
其中$A$1:$C$3
包含您的源数据。
根据需要向下复制公式。
您也可以使用
=OFFSET($A$1,INT((ROW()-ROW($H$1))/3),MOD(ROW()-ROW($H$1),3))
在所提到的文章中提及。
答案 3 :(得分:1)
我建议您检查 Excel unpivot option 以执行您的任务。
From Table/Range
Unpivot Columns
附近的箭头并选择最佳选项(如果您按照步骤 3可以点击Unpivot only selected columns
)此过程特别适用于复杂矩阵。
查看上面的链接以获取更多信息
答案 4 :(得分:1)
对于将创建数组的通用方法,您可以使用:
=LET( Matrix, $A$1:$C$3,
rM, ROWS( Matrix ),
cM, COLUMNS( Matrix ),
cells, SEQUENCE( 1, rM * cM, 0 ),
INDEX( Matrix, INT( cells / cM ) + 1, MOD( cells, cM ) + 1 )
)
虽然这利用了 LET 函数,但它用于可读性。对于那些不使用Excel365的人来说,没有LET也可以做到这一点,但阅读起来很痛苦。
如果您需要将结果作为列传递,请更改 SEQUENCE 中的参数顺序
= LET( Matrix, $A$1:$C$3,
rM, ROWS( Matrix ),
cM, COLUMNS( Matrix ),
cells, SEQUENCE( rM * cM, 1 , 0 ),
INDEX( Matrix, INT( cells / cM ) + 1, MOD( cells, cM ) + 1 )
) )
当然,A1:C3 可以是任意形状的数组。
答案 5 :(得分:1)
使用当前版本的 Excel,我意识到矩阵运算有了很大改进。对于将矩阵转换为单列,我建议按以下方式组合 INDEX 和 SEQUENCE 函数:
Matriz_to_Column_Formula:
=INDEX(matrix_range,
TRUNC((SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1))/COLUMNS(matrix_range)+1,0),
MOD(SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1),COLUMNS(matrix_range))+1)
如果要删除空格:
=FILTER(Matriz_to_Column_Formula, Matriz_to_Column_Formula<>"")
这里是一个简短的解释:
索引需要三样东西:矩阵源、行和列。您每次计算的行和列允许索引指向矩阵源中的特定元素。索引会根据您的需要为您提供尽可能多的元素,即 Rows*Columns。
让我使用 SEQUENCE 来扩展行和列以按每个元素导航:
行:
TRUNC((SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1))/COLUMNS(matrix_range)+1,0)
公式 SEQUENCE 将生成与您的矩阵一样多的元素,从 0 开始直到 Rows*Columns-1,并且除以列将仅指向特定行。使用 +1 是因为序列从 0 开始并且 INDEX Row 元素从 1 到 n 工作。 TRUNC 仅用于获取行的整数。
列:
MOD(SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1),COLUMNS(matrix_range))+1
在这里您应用相同的原则,使用 SEQUENCE 生成与矩阵从 0 到 Rows*Columns-1 的元素一样多的元素,通过获取序列和列之间的余数,您将指向您需要的列。
好的,这是我的第一篇文章,希望对大家有所帮助。感谢您在许多场合的帮助!
Excel 示例: Matrix to Single Column - Example in excel
选项 1:
=INDEX(C3:E7,
TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),
MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1)
选项 2:
=IF(INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1)="","",INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1))
删除空:
=FILTER(INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1),
INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1)<>"")