【问题标题】:Excel: Formulas for converting data among column / row / matrixExcel:用于在列/行/矩阵之间转换数据的公式
【发布时间】:2014-01-15 01:16:30
【问题描述】:

是否有将列中的数据转换为矩阵或行的公式? 并转换成其他组合?

更复杂的情况如何:将宽度为 W 的矩阵重塑为宽度 N*W?

有几个类似或相关的问题。 我已经回答了其中一些,标有*。 我不断更新此列表,因为添加了新的类似(或相等)问题:

Formatting Data: Columns to Rows*

Move content from 1 column to 3 columns*

how to split one column into two columns base on conditions in EXCEL*

writing a macro to transpose 3 columns into 1 row

Excel VBA transpose with characters

Mathematical transpose in excel

How do transform a "matrix"-table to one line for each entry in excel

Convert columns with multiple rows of data to rows with multiple columns in Excel.

How to use VBA to reshape data in excel*

Sorting three columns into six, sorted horizontally by surname using excel *

divide data in one column into more column in excel

Move data from multiple columns into single row*

一些答案​​似乎可以“升级”到更全面的内容。 这可能吗?

转换自/转换为的示例格式是:

1
2
3
4
5
6
7
...

1   2   3   4   5   6   7   ...

矩阵(此处跨度为 4 列)

1   2   3   4
5   6   7   8
...

【问题讨论】:

  • 我认为oyu可以将列转换为一行或将行转换为列(使用公式=TRANSPOSE()或复制粘贴后);我不认为有一个“toMatrix”公式....您可能需要使用 VB 或结合许多其他公式...
  • @user3116916 - 请检查下面的第 7 项。它提供了一种转置方式,不使用以下任何一种:1) =TRANSPOSE()(需要数组公式),2) VBA,3) 特殊粘贴,4) “很多”其他公式。
  • 学到了一些新东西:)

标签: excel matrix excel-formula transpose


【解决方案1】:

这里的想法是提供一些内容,可以对上面列出的问题进行微调,也可以作为未来相关问题的参考。

要使用的基本功能是INDEXOFFSET。每种方法的优缺点都会在具体例子之后,结合附图给出。它显示了几个范围及其定义的名称(在下面的 斜体 中)。 所有定义的名称都可以替换为对相应单元格的直接绝对引用。

1.列到矩阵

span(在 C1 中)给出了列数。然后matrix_data_top_left(这里是D1)包含

=INDEX(col_data,(ROW()-ROW(matrix_data_top_left))*span+(COLUMN()-COLUMN(matrix_data_top_left)+1),1)

然后将其复制到 matrix_data 的其余部分。 请注意,复制到 D5 也会出现错误,因为生成的公式引用了 col_data (A1:A16) 之外的单元格。 在 matrix_data2_top_left (I1) 和

中得到相同的结果
=OFFSET(col_data_top,(ROW()-ROW(matrix_data2_top_left))*span+(COLUMN()-COLUMN(matrix_data2_top_left)),0)

并以类似方式复制到 matrix_data2。 请注意,复制到 I5 也会返回 0,而不是错误。

OFFSET 的优点是只需要一个单元格用作基本引用 (col_data_top),因此用更多数据扩展源数据范围不需要重新定义源数据范围公式,一个人只需复制粘贴到一个扩展的目标范围内。 另一方面,使用INDEX 扩展源数据范围需要首先在公式中更新它(如果明确使用则更改范围),然后复制粘贴到扩展的目标范围中。为此目的,使用定义的名称更加通用,因为在这里重新定义 col_data 就足够了(并且可以在扩展目标范围后完成)。 由于同样的属性,INDEX 提供了一种对源范围的自动边界检查,OFFSET 没有。

2。矩阵到列

col_data2_top 包含

=INDEX(matrix_data2,INT((ROW()-ROW(col_data2_top))/span)+1,MOD(ROW()-ROW(col_data2_top),span)+1)

col_data3_top

=OFFSET(matrix_data2_top_left,INT((ROW()-ROW(col_data3_top))/span),MOD(ROW()-ROW(col_data3_top),span))

两个公式都向下复制。 INDEXOFFSET 之间存在相同的差异。

3.矩阵到行

由于OFFSET 没有给出错误,其余公式将使用它。沿着上面显示的路线适应INDEX 很容易。 row_data_left 包含

=OFFSET(matrix_data_top_left,INT((COLUMN()-COLUMN(row_data_left))/span),MOD(COLUMN()-COLUMN(row_data_left),span))

然后复制到右边。

4.列到行

row_data2_left 包含

=OFFSET(col_data_top,COLUMN()-COLUMN(row_data2_left),0)

再次复制到右侧。

PS:公式=TRANSPOSE(...适用于这种情况,它应该作为数组公式输入(ctrl+shift+enter kbd>)。尽管如此,it might be desirable to avoid array formulas.

5/6。行到列/矩阵

沿着这些路线很容易获得。 例如,col_data_top 包含

=OFFSET(row_data_left,0,ROW()-ROW(col_data_top))

然后抄下来。

7.矩阵转置

要在matrix_data3(图中未显示)中得到matrix_data2的转置,只需要使用matrix_data3_top_left,与公式

=OFFSET(matrix_data2_top_left,COLUMN()-COLUMN(matrix_data3_top_left),ROW()-ROW(matrix_data3_top_left))

并复制到合适的目标范围内。

8.矩阵重塑

我们想将一个矩阵重塑为一个更宽的矩阵: matrix_data4,具有 N4 行和 M4 列 (width4),进入 matrix_data5,具有 N5=N4/R 行和 M5=M4xR 列( width5),其中 R (rep5) 表示重复次数 (图中未显示的矩阵。)然后使用

=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))

现在我们想将一个矩阵重塑为一个更窄的矩阵: matrix_data4,具有 N4 行和 M4 列 (width4),进入 matrix_data6,具有 N6=N4xS 行和 M6=M4/S 列( width6),其中 S (split6) 为分割数 (图中未显示的矩阵。)然后使用

=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)))

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 2018-05-02
    • 2017-02-12
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2018-03-01
    • 2021-11-20
    相关资源
    最近更新 更多