Excel:列/行/矩阵间数据转换公式
是否存在将列中的数据转换为矩阵或行的公式? 以及从/转换为其他组合 还有一种更复杂的情况呢:将宽度为W的矩阵重塑为宽度为N*W的矩阵 有几个类似或相关的问题。 我已经回答了其中一些问题,并用*标记。 随着新的类似(或同等)问题的增加,我不断更新此列表: * * * * * * 一些答案似乎可以“升级”到更具包容性的东西。 可能吗 要从/转换为的示例格式包括: 纵队Excel:列/行/矩阵间数据转换公式,excel,matrix,excel-formula,transpose,Excel,Matrix,Excel Formula,Transpose,是否存在将列中的数据转换为矩阵或行的公式? 以及从/转换为其他组合 还有一种更复杂的情况呢:将宽度为W的矩阵重塑为宽度为N*W的矩阵 有几个类似或相关的问题。 我已经回答了其中一些问题,并用*标记。 随着新的类似(或同等)问题的增加,我不断更新此列表: * * * * * * 一些答案似乎可以“升级”到更具包容性的东西。 可能吗 要从/转换为的示例格式包括: 纵队 1 2 3 4 5 6 7 ... 划船 矩阵(此处跨度为4列) 我们的想法是在这里提供一些可能用于对上面列出的问题进
1
2
3
4
5
6
7
...
划船
矩阵(此处跨度为4列)
我们的想法是在这里提供一些可能用于对上面列出的问题进行轻微修改的内容,这也可以作为将来相关问题的参考 要使用的基本功能是
索引
或偏移
。每种方法的优点和缺点将在明确的示例后给出,并参考该图。它显示了几个范围及其定义的名称(在下面的斜体)。
所有定义的名称都可以替换为对相应单元格的直接绝对引用
1。列到矩阵
跨距(C1)表示列数。然后矩阵数据左上角(此处为D1)包含
然后将其复制到矩阵_数据的其余部分。
请注意,复制到D5也会产生错误,因为生成的公式引用的是col_数据(A1:A16)之外的单元格。
在矩阵_data2_top_left(I1)中获得了相同的结果
并将类似内容复制到矩阵_数据2中。
请注意,复制到I5也会返回0
,而不是错误
OFFSET
的优点是只需要一个单元格作为基准参考(col_data_top),因此用更多数据扩展源数据范围不需要在公式中重新定义源数据范围,只需将粘贴复制到扩展的目标范围中即可。
另一方面,使用索引扩展源数据范围需要首先在公式中更新它(如果显式使用,则更改范围),然后将粘贴复制到扩展的目标范围中。为此,使用定义的名称更通用,因为在这里重新定义col_数据就足够了(可以在扩展目标范围后进行)。
由于这个相同的属性,INDEX
提供了一种对源范围的自动边界检查,而OFFSET
没有
2。矩阵到列
col_数据2_顶部包含
和col_data3_top
两个公式都向下复制。
索引
和偏移
之间存在相同的差异
3。矩阵到行
由于OFFSET
不会给出错误,因此其余公式将使用它。按照上面所示的思路调整索引是很容易的。
行\数据\左侧包含
然后复制到右边
4。列到行
行数据2左包含
再次复制到右侧
PS:formula=TRANSPOSE(…
适用于这种情况,它应该作为数组公式输入(使用ctrl+shift+enter)
5/6.行到列/矩阵
沿着这些路线很容易获得。
例如,col_data_top包含
然后抄下来
7.矩阵转置
要获得矩阵_data3(图中未显示)中矩阵_data2的转置,只需使用矩阵_data3_top_left,公式如下
=OFFSET(matrix_data2_top_left,COLUMN()-COLUMN(matrix_data3_top_left),ROW()-ROW(matrix_data3_top_left))
并复制到合适的目标范围
8.矩阵重塑
我们希望将矩阵重塑为更宽的矩阵:
矩阵_data4,具有N4行和M4列(宽度4),分为
矩阵_data5,其中N5=N4/R行和M5=M4xR列(宽度5),R(rep5)为重复次数
(图中未显示矩阵)然后使用
现在我们要将矩阵重塑为更窄的矩阵:
矩阵_data4,具有N4行和M4列(宽度4),分为
矩阵_data6,其中N6=N4xS行,M6=M4/S列(宽度6),S(split6)为拆分数
(图中未显示矩阵)然后使用
我认为oyu可以将列转换为行或将行转换为列(使用公式=TRANSPOSE()
或在复制和粘贴之后);我不认为存在“toMatrix”公式…您可能需要使用VB或组合许多其他公式…@user3116916-请检查下面的第7项。它提供了一种不使用任何一种方法的转置方法:1)=TRANSPOSE()
(需要数组公式),2)VBA,3)粘贴特殊,4)“很多”其他公式。了解了一些新的内容:)
1 2 3 4
5 6 7 8
...
=INDEX(col_data,(ROW()-ROW(matrix_data_top_left))*span+(COLUMN()-COLUMN(matrix_data_top_left)+1),1)
=OFFSET(col_data_top,(ROW()-ROW(matrix_data2_top_left))*span+(COLUMN()-COLUMN(matrix_data2_top_left)),0)
=INDEX(matrix_data2,INT((ROW()-ROW(col_data2_top))/span)+1,MOD(ROW()-ROW(col_data2_top),span)+1)
=OFFSET(matrix_data2_top_left,INT((ROW()-ROW(col_data3_top))/span),MOD(ROW()-ROW(col_data3_top),span))
=OFFSET(matrix_data_top_left,INT((COLUMN()-COLUMN(row_data_left))/span),MOD(COLUMN()-COLUMN(row_data_left),span))
=OFFSET(col_data_top,COLUMN()-COLUMN(row_data2_left),0)
=OFFSET(row_data_left,0,ROW()-ROW(col_data_top))
=OFFSET(matrix_data2_top_left,COLUMN()-COLUMN(matrix_data3_top_left),ROW()-ROW(matrix_data3_top_left))
=OFFSET(matrix_data4_top_left,(ROW()-ROW(matrix_data5_top_left))*rep5+INT((COLUMN()-COLUMN(matrix_data5_top_left))/width4),MOD((COLUMN()-COLUMN(matrix_data5_top_left)),width4))
=OFFSET(matrix_data4_top_left,INT((ROW()-ROW(matrix_data6_top_left))/split6),MOD((ROW()-ROW(matrix_data6_top_left)),split6)*width4+(COLUMN()-COLUMN(matrix_data6_top_left)))