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

前言

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

一旦做成第一种格式,如何快速转换成第二个格式呢?

1列出项目组成员

A9=INDIRECT(TEXT(SMALL(IF($B$2:$F$4<>"",ROW($B$2:$F$4)*1000+COLUMN($B$2:$F$4),65536),ROW(A1)),"R0C000"),0)&""

按CTRL+SHIFT+ENTER三键结束,下拉填充公式

解释:

IF($B$2:$F$4<>"",ROW($B$2:$F$4)*1000+COLUMN($B$2:$F$4),65536)

如果$B$2:$F$4区域的单元格内容不为空,则等于该单元格的行号乘以1000加上该单元格的列号,否则等于65536。

如:D2不为空,则返回2*1000+4=2004;E2为空值,则返回值为65536

此结果为包含一组数的数组{2002,2003,2004,65536,65536;3002,3003,3004,3005,65536;4002,4003,4004,4005,4006}

SMALL(IF($B$2:$F$4<>"",ROW($B$2:$F$4)*1000+COLUMN($B$2:$F$4),65536),ROW(A1))

取第一个最小的值,如果下拉则顺序取,第二个,第三个最小的,依次类推。

TEXT(SMALL(IF($B$2:$F$4<>"",ROW($B$2:$F$4)*1000+COLUMN($B$2:$F$4),65536),ROW(A1)),"R0C000")

将第一个最小的值,变成文本格式,格式为“R0C000”,如:2001变成文本格式为:R2C001

INDIRECT(TEXT(SMALL(IF($B$2:$F$4<>"",ROW($B$2:$F$4)*1000+COLUMN($B$2:$F$4),65536),ROW(A1)),"R0C000"),0)

返回地址为R2C001单元格的值,即第二行第一列的值,引用格式为R1C1格式。

A9=INDIRECT(TEXT(SMALL(IF($B$2:$F$4<>"",ROW($B$2:$F$4)*1000+COLUMN($B$2:$F$4),65536),ROW(A1)),"R0C000"),0)&""

为了防止出现0值,将结果与空值连接,变成空文本格式

CTRL+SHIFT+ENTER三键结束,形成数组公式

2列出项目名称

B9=INDEX($A$1:$A$4,MIN(IF(ISNUMBER(FIND(A9,$B$2:$F$4,1)),ROW($B$2:$F$4),65536)))

按CTRL+SHIFT+ENTER三键结束,下拉填充公式

解释:

FIND(A9,$B$2:$F$4,1))

在$B$2:$F$4区域的单元格中查找A9的值,返回该值在某个单元格出现的位置,如果能查找到,则返回具体数值,查找不到返回错误值,此结果仍然是一个数组

{1,#VALUE!,#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!}

IF(ISNUMBER(FIND(A9,$B$2:$F$4,1)),ROW($B$2:$F$4),65536)

判断FIND的返回值,如果是数字,返回该单元格的行号,否则返回65536

{2,65536,65536,65536,65536;65536,65536,65536,65536,65536;65536,65536,65536,65536,65536}

MIN(IF(ISNUMBER(FIND(A9,$B$2:$F$4,1)),ROW($B$2:$F$4),65536))

取返回数组的最小值,此时为2

INDEX($A$1:$A$4,MIN(IF(ISNUMBER(FIND(A9,$B$2:$F$4,1)),ROW($B$2:$F$4),65536)))

从$A$1:$A$4区域中检索出第二个值,即为A2的值“三国”

CTRL+SHIFT+ENTER三键结束,形成数组

知识点

如果你自以为学会了几个函数就感觉不得了了,其实你的路还很长,加油吧,朋友!

ROW\COLUMN

IF

SMALL

TEXT

INDIRECT

FIND

MIN

ISNUMBER

MIN

INDEX

&""

CTRL+SHIFT+ENTER

END

欢迎入群讨论!(QQ群)
(0)

相关推荐

  • 从含有数字的文本字符串中提取出数字

    我的工作表中有许多含有数字的单元格,我想将数字单独提取出来.如下图1所示,将列A的单元格中的数字提取出来放置在列B中,应该如何编写公式呢? 图1 可以使用数组公式: =1*MID(A1,MATCH(T ...

  • Excel公式技巧100:遍历单元格中的数据

    excelperfect 有时候,我们需要从单元格数据中提取出满足条件的值.例如,下图1所示的单元格B3中的数据"NO13859724621",我们想要得到相邻两个数字组成的最大的 ...

  • Excel公式技巧84:对混合数据中的数值求和

    excelperfect 有时候,有些需求真的是让人难以想像!如下图1所示,在列A中存在文本.数值和空单元格.现在,想要求头3个出现的数字之和,也就是说,求单元格A5中的10000.A14中的2000 ...

  • 一招解决“光板天”,废片变大片!

    风光摄影师都是靠天吃饭,然而好天气实在太少.像重庆山城,一年80%的天空都是"光板天",真正适合拍照的不足20天.适合拍照的天都集中在七八九月,摄影师是躁动的,害怕错过每一次拍摄机 ...

  • 多列变一列(三种方法)

    今天是大年初七,很多表亲们开始上班了,祝大家开工大吉! 一张表格中有多列数据,如图1,想把这些数据全部复制粘帖到一列,每列数据行数可能不一样.如果一列列数据选中后复制粘帖,很慢,这里介绍三种方法快速实 ...

  • 一列变多列,模式化公式请收好

    小伙伴们好啊,今天给大家带来的是一个用函数实现行列转换的技巧. 如下图所示,是一份员工名单: 这个表中的姓名只有一列,却有40多行.如果以这样的版式打印,不仅浪费纸张,打印出的效果估计也能让领导掉头发 ...

  • 一列变两列,只要一分钟

    先看数据源,是一组中英文对照的短语: 现在咱们要实现两种效果. 第一种,将中英文的顺序互相调整,变成下面这样: 思考一下,要怎么实现呢? 其实,只需要两个等号. B2单元格输入 =A3 B3单元格输入 ...

  • 别再粘!粘!粘!Excel多列变一列5秒就完成!99%人不知道的新技巧

    可以说,会用Excel的用户都会制作简单的数据透视表.但昨天兰色发现数据透视表的一个"新"功能,估计99.9%的用户不知道. 数据透视表可以设置不同的版式,其中一个是压缩式版式,它 ...

  • 两列变一列,这些方法你会几种?

    如下图所示,需要将A2:B9的两列内容,转变为D列的样子. 思考一下,有几种方法能实现呢? 这个题目乍一看,是不是有点难度? 今天咱们要使出浑身解数,一起玩个够. 1 VBA代码法 按Alt+F11, ...

  • 一列变多列,效果真不错

    小伙伴们好啊,今天给大家带来的是一个用函数实现行列转换的技巧. 如下图所示,是一份员工名单: 这个表中的姓名只有一列,却有40多行.如果以这样的版式打印,不仅浪费纸张,打印出的效果估计也能让领导掉头发 ...

  • 一招解决竖图变横图 #ps教程 #ps技能

    一招解决竖图变横图 #ps教程 #ps技能

  • 怎么将多行多列的数据变成一列?4个解法。

    - 问题 -怎么将这个多行多列的数据变成一列? - 1 - 不需保持原排序选中所有列逆透视,一步搞定 - 2 - 保持原排序:操作法一思路直接,为保排序,操作麻烦2.1 添加索引列 2.2 替换nul ...