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

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

1.将下列城市转为单列(按列的方向排列)

在F2单元格输入公式=INDIRECT(TEXT(MOD(SMALL(COLUMN(A:D)/1%%+ROW($2:$5)/1%+COLUMN(A:D),ROW(A1)),10^4),"R0C00"),),按ctrl+shift+enter三键结束,向下填充。

我们一段一段的来拆解公式,=ROW($2:$5)/1%+COLUMN(A:D)这部分用A2:D5这个区域的行号乘以100再加上列号,返回的结果如下图红色框所示。这样做的目的是为了后面得到文本型的单元格引用。比如拉萨所在的单元格是A2,也就是2行1列,那我们就用201来表示。

虽然我们得到了表示单元格引用的数字,但是题目要求按列的方向排列成一列,也就意味着我们先要提取第1列的数字201,301,401,501;然后提取第2列的数字202,302,402,502;再是第3列的,最后是第4列的。如果我们直接用small提取第1个,第2个,第3个。。。第n个最小值,那么结果是201,202,203,204。。。504,这样就是按行的方向了,与我们的要求不符。那怎么样才能按列的方向提取数字呢?那就是在列的方向上加权。

=COLUMN(A:D)/1%%+ROW($2:$5)/1%+COLUMN(A:D)这部分就是在上一步的基础上在列的方向上加权处理,用列号乘以1万再加上一步的结果,返回的结果如下图所示。这样的话,第1列是1万开头,第2列是2万开头,第3列是3万开头。。。然后用small从小到大的提取就是按列的方向提取了。

=SMALL(COLUMN(A:D)/1%%+ROW($2:$5)/1%+COLUMN(A:D),ROW(A1))这部分就是用small提取上一步的第1个最小值10201,公式下拉提取第2个,第3个。。。第n个最小值,如下图所示。这样就按列的方向提取出来了,但前面的1万,2万我们不要,只要后面的3位数201,301等。所以下一步还要把前面的万去掉,这属于“过河拆桥”。

=MOD(SMALL(COLUMN(A:D)/1%%+ROW($2:$5)/1%+COLUMN(A:D),ROW(A1)),10^4)这部分用mod把上一步的结果除以1万,取余数,得到了我们要的结果,如下图所示,完成“过河拆桥”。

=TEXT(MOD(SMALL(COLUMN(A:D)/1%%+ROW($2:$5)/1%+COLUMN(A:D),ROW(A1)),10^4),"R0C00")这部分用text把上一步的结果转为r1c1样式的文本型单元格引用,如下图所示。

=INDIRECT(TEXT(MOD(SMALL(COLUMN(A:D)/1%%+ROW($2:$5)/1%+COLUMN(A:D),ROW(A1)),10^4),"R0C00"),)这部分就是用indirect返回真正的单元格引用,实现了多行多列转单列的效果。

高手的公式是这样的,在H2单元格输入公式=INDIRECT(TEXT(SMALL(DATE(COLUMN(A:D),ROW($2:$5),COLUMN(A:D)),ROW(A1)),"RmCd"),)按三键结束,向下填充。

利用时间日期函数,将行号、列号和加权的方向放在3个参数中,组成一个日期或时间;然后用text取出行号和列号得到文本型的单元格地址。由于加权的方向是主要关键字,所以这里要放在第1参数年份中;行号和列号按情况放在第2或第3参数中。

不过我认为数据量足够大,超出月份或天数时,这种用法会出错,不知道高手有没有解决方法。对于这种用法,我也是第1次见到,所以理解不足。如有错误,欢迎大家纠正。

写一个我自己想出来的公式,主要是为了解决之前一段公式重复用2次的问题。在J2单元格输入公式=INDIRECT(TEXT(SUM(MMULT(TRUNC(SMALL(COLUMN(A:D)/1%+ROW($2:$5),ROW(A1)),{0,-2}),{1,0;-1,1})*10^{2,-2}),"R0C00"),),不用三键,向下填充。公式还是挺长,用了很多常量数组,但可以将代表1列2行的102变为2行1列的201。

如果你有其他方法,欢迎在留言区写出答案,让我们一起学习。

文件链接:

https://pan.baidu.com/s/1OlOSnm0MZ8lv9tmJR2IrNQ

提取码:ot32

(0)

相关推荐

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

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

  • 解读分析多区域查找的难题

    说起查找 你可能想到我们最常用的 VLOOKUP或者INDEX+MATCH组合 基本可以解决大部分查询引用问题 当时有的时候由于数据布局问题,这个套路就搞不定了 今天的就是其中之一 对于新手这个使用函 ...

  • 如何用公式将多列合并为一列

    点击上方 蓝色 文字  关注我们吧! 送人玫瑰,手有余香,请将文章分享给更多朋友 动手操作是熟练掌握EXCEL的最快捷途径! EXCEL函数总是可以给我们带来不断的惊喜.前一段时间,一位朋友问我了一个 ...

  • 分享几个有趣好玩的Excel公式~

    大家晚上好! 自动累计 在C2单元格输入,=SUM($B$2:B2),下拉公式,就会自动累计. 查找关键词 通过下方的公式,可以查找关键词 =LOOKUP(9^9,FIND($D$2:$D$5,A2) ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 《列那狐的故事》列那狐的宝物,狮王想要吗?那我得活着出去才行

    <列那狐的故事>列那狐的宝物,狮王想要吗?那我得活着出去才行 一说有宝物,狮王的态度立马就改变了.首先列那狐是一个忠臣,他一心护主,并且打算把宝物交给自己.其次,可以得到特赦.列那狐如果真 ...

  • excel数据拆分:将单列拆分成多列的几种方法

    有时候我们的Excel表格里只有一列数据,如果需要打印出来的话,就是下面这样子的: 浪费纸不说,还很丑,这样打印的表格你真的敢拿给老板看吗? 对于这样的数据,就需要把一列平均分配到多列,通常有两种方法 ...

  • 再见Ctrl+C!单列数据转换成多列数据,用它只需30秒!

    送你200篇独家Excel精华教程 全套Excel视频,扫码观看! 每天一点小技能 职场打怪不得怂 编按:别再Ctrl+C了!简单的工作做一万遍也会让人心力交瘁!在办公中,我们常常会遇到把单列数据变成 ...