indirect+text:多行多列转单列(一)

小伙伴们,大家好。今天要分享的内容是多行多列转单列的方法,主要利用的是indirect和text函数。先来看下数据源和实现后的效果。下图左表是数据源,转换成单列的效果如F列和H列所示。F列是按行的方向排列,H列是按列的方向排列。

先来看按行的方向排列的,在F2单元格输入公式=INDIRECT(TEXT(SMALL(ROW($2:$7)/1%+COLUMN(A:D),ROW(A1)),"r0c00"),),按ctrl+shift+enter三键结束,向下填充。

首先看=ROW($2:$7)/1%+COLUMN(A:D)这部分,将行号扩大100倍,再加上列号,得到下图红色框所示的结果。由于是方向不同的一维数组的运算,得到二维数组。从结果中我们可以看到,数字的大小按行的方向来看是从小到大排列的。

=SMALL(ROW($2:$7)/1%+COLUMN(A:D),ROW(A1))这部分是从上一步的结果中取出第1个最小值201。公式下拉的话就是第2个最小值202,第3个最小值203,第4个最小值204,第5个最小值301,。。。以此类推,得到的数字顺序刚好就是按行的方向排列。

=TEXT(SMALL(ROW($2:$7)/1%+COLUMN(A:D),ROW(A1)),"r0c00")这部分利用text将上一步的数字变为文本型的单元格地址,也就是r1c1样式,如下图红色框所示,r2c01就是2行1列,也就是A2单元格。

=INDIRECT(TEXT(SMALL(ROW($2:$7)/1%+COLUMN(A:D),ROW(A1)),"r0c00"),)这部分就是最后的公式,利用indirect将文本型单元格地址转为真正的单元格引用,如下图红色框所示。最终的效果如F列所示。

其实像这种规则的区域,没有空单元格,也可以用=INDIRECT("r"&INT((ROW(A1)-1)/4)+2&"c"&MOD(ROW(A1)-1,4)+1,)这个公式来完成,还不用按ctrl+shift+enter三键。

再来看按列的方向排列的,在H2单元格输入公式=INDIRECT("r"&MOD(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1)),100)&"c"&INT(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1))%),),按ctrl+shift+enter三键结束,向下填充。

=COLUMN(A:D)/1%+ROW($2:$7)这部分是将列号乘以100,再加上行号,得到下图红色框的结果。可以看到数字的大小按列的方向来看是从小到大排列的。所以用small提取最小值的时候就是按列的方向来提取。

=SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1))这部分就是用small取出第1个最小值102,公式下拉提取第2个最小值103,104。。。第1列的提完提第2列的202,203,。。。一直提完。但是这里的102可不是1行2列,是1列2行,所以要想办法变为2行1列。

=MOD(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1)),100)这部分是用mod求余,比如102除以100得到余数2,这个2就是2行。同样的=INT(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1))%)这部分是用int取整,比如102除以100得到1.02,用int取整得到1,这个1就是1列。

="r"&MOD(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1)),100)&"c"&INT(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1))%)这部分是将上面得到的行号和列号重新组合成文本型的单元格地址,如下图红色框所示。

最后完整的公式为=INDIRECT("r"&MOD(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1)),100)&"c"&INT(SMALL(COLUMN(A:D)/1%+ROW($2:$7),ROW(A1))%),),用indirect返回真正的单元格引用,如红色框所示,也就是H列的结果。

这种规范的没有空单元格的区域同样可以用=INDIRECT("r"&MOD(ROW(A1)-1,6)+2&"c"&INT((ROW(A1)-1)/6)+1,)这个公式来完成,同样不用按三键。

你还有别的方法吗?欢迎在留言区写出你的答案,让我们一起学习。

文件链接:

https://pan.baidu.com/s/1r4i7Lcrq6NgUs-EWdurDyA

提取码:19r5

(0)

相关推荐

  • 你还不会去重多列合并一列吗?快来看看这里吧!

    送人玫瑰,手有余香,请将文章分享给更多朋友 动手操作是熟练掌握EXCEL的最快捷途径! 小伙伴问了我这样一个问题:如何利用公式将下表中的多列合并为一列,而且要剔除重复值. 这个题目和我们之前的帖子如何 ...

  • 一招解决多行多列变一列的问题

    前言 你是不是也有过类似的经历,将表格设计成横向格式,给统计和分析带来很大的不方便,其实正确的姿势是第二个,正确的表格应有标题和记录组成,不应该合并单元格,每一列具有相同的属性,每一行代表一条完整的记 ...

  • indirect+text:多行多列转单列的改进(按列的方向)

    小伙伴们好,今天对前面文章<indirect+text:多行多列转单列(一)>中的方法做个改进,主要改进的是按列的方向排列的.当时的公式有一部分重复用了2次,所以公式会比较长,不知道你是否 ...

  • indirect+text:多行多列转单列(二)

    小伙伴们,大家好.昨天说了多行多列转单列的方法,不过区域中都是非空单元格:如果区域中有空单元格,又该怎么办呢?今天就来说说这个问题.先来看下数据源和转换后的效果.下图左表是数据源,F列和H列是转换后的 ...

  • 一万零一,是个神奇的数字。多行多列转单列就靠它!

    下图A2:D6是数据源,记录的是一些姓名.现在要将这个区域的姓名逐列提取,并放置在一列中,结果如F列所示.也就是先提取A列的姓名,然后是B列的.C列的.D列的. 这个问题用函数来完成还是挺困难的.除了 ...

  • 多行多列转单列(按列的方向)

    将下列二维区域中的名字按列的方向转为单列,结果如F列所示.对于这种问题,我们的思路是以终为始,也就是由结果往回推.方法是用引用函数+构造序列数. -01- offset函数 第一种方法先用offset ...

  • indirect+text:多行多列中提取不重复值(二)

    小伙伴们,大家好.今天要分享的内容还是多行多列中提取不重复值,但是要比昨天的难一点,今天的区域中包含空单元格.如下图所示.F列和H列是提取后的结果.F列是按行提取的,H列是按列提取的. 还是先来看按行 ...

  • indirect+text:多行多列中提取不重复值(一)

    小伙伴们好啊,今天要分享的内容是从多行多列中提取不重复值,用的还是indirect+text.先来看下数据源和提取后的效果.下图左表是数据源,是一些城市,其中有重复的.现在要提取出不重复的,并且放在一 ...

  • Excel多行多列数据,包含多空格,快速转换成单列

    大家请看范例图片,Excel多行多列数据,包含多空格,快速转换成单列.メ メ我们先打开剪贴板,复制表格区域.メ メ单选单个单元格,双击进入编辑模式.メ メ点击剪贴板中的全部粘贴.メ メCTRL+H打开 ...

  • 单列数据转换为M行N列数据

    版权所有 转载须经Excel技巧网/Office学吧允许 [ Excel ]:如何将小于60分的成绩替换为不及格?

  • Excel indirect 函数(1) - 将一列数据排列成m行*n列

    今天要讲到一个新函数 indirect,这个函数也是神级函数之一,因为太强大,我决定为它的每种应用场景开一个案例专讲. 我用的版本是 Excel 2016,其他版本的界面可能略有不同. 案例: 怎么把 ...