如何使用Excel将矩阵转换为单列

如何使用Excel将矩阵转换为单列,excel,matrix,Excel,Matrix,我在Excel中有以下矩阵: 3列:A、B、C 第1行:a b c 第2行:d e f 第3行:ghi 我需要的是一个包含所有这些值的列。结果应该是这样的: a b c d e f g h 我 在这种情况下,转置函数不起作用。我尝试了间接函数,但没有找到解决方案。我更愿意用标准的Excel公式来处理它,而不是用makro 有什么想法吗?说我们有: 在E1中输入: =INDEX($A$1:$C$3,ROUNDUP(ROW()/3,0),IF(MOD(ROW(),3)=0,3,MOD(ROW(),

我在Excel中有以下矩阵:

3列:A、B、C

第1行:a b c

第2行:d e f

第3行:ghi

我需要的是一个包含所有这些值的列。结果应该是这样的:

a

b

c

d

e

f

g

h

在这种情况下,转置函数不起作用。我尝试了间接函数,但没有找到解决方案。我更愿意用标准的Excel公式来处理它,而不是用makro

有什么想法吗?

说我们有:

E1中输入:

=INDEX($A$1:$C$3,ROUNDUP(ROW()/3,0),IF(MOD(ROW(),3)=0,3,MOD(ROW(),3)))
并向下复制以获得:




使用类似的公式,您可以将任何二维表映射到一行或一列中。将一列或一行映射到一个表中同样容易。

上面的答案非常好,但Chip Pearson在此()提供的解决方案IMHO在大多数方面都优于IMHO,因为它可以立即/自动:

1) 自行确定行/列delim值,并立即适用于矩形,例如,在上面,必须为num Cols显式输入3,为num Rows显式输入3,还必须确定哪个是哪个。而Pearson的解决方案则自动做到这一点(如上文rmf的评论/担忧)


2) Pearson为Col订购和Row订购提供了两种变体。

这已在《非常通用》的第2项中介绍过

目标范围的顶部单元格(例如,
$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))
如参考文章所述。

我建议您检查以执行任务

  • 选择你的矩阵
  • 浏览数据选项卡中的“获取和转换”部分,然后从表/范围中单击
  • 在“新建电源查询编辑器”中,选择要取消打印的列
  • 浏览“变换”选项卡中的“任意列”部分,单击
    Unpivot Columns
    附近的箭头,然后选择最佳选项(如果按照步骤3进行操作,则可以单击
    Unpivot only selected Columns
  • 关闭并加载
  • 此过程特别适用于复杂矩阵。

    查看上述链接了解更多信息

    有关创建阵列的通用方法,您可以使用:

    =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也可以做到这一点,但阅读起来很痛苦

    如果需要将结果作为列传递,请按顺序更改参数的顺序

    = 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可以是任意形状的数组。

    我的相同方法版本:=OFFSET($A$1,TRUNC((ROW()-1)/3),MOD(ROW()-1,3))发现@user3964075版本更容易理解。使用德文版Excel。所以它是=BEREICH.VERSCHIEBEN($1;KÜRZEN((ZEILE()-1)/3);REST($ZEILE()-1;3))。可能是即使在英文版本中,逗号也必须替换为分号。无法测试它。如果是,请更正。我有一个矩形矩阵。哪3个代表矩阵行,哪3个代表矩阵列。可能是