Excel公式技巧107:将表数据转换成列数据(续)

excelperfect

在《Excel公式技巧106:将表数据转换成列数据》中,详细解析了一位网友问我的问题的解答过程。然而,事情并没有完。上次提供的示例数据太完美了,所以实现起来相对简单。在上次的解答之后,该名网友又提出了一个比较棘手的问题。

如下图1和图2所示,需要将工作表Sheet1中的数据转换成工作表Sheet2中的数据。

图1

图2

由于在单元格区域B2:E6中每行的数据不一,这给编写公式带来了难度。我的思路是,对于工作表Sheet1中列A的数据,根据同一行在单元格区域B2:E6中数据的数量,计算出共有多少个数据要重复,如下图3所示,这是一个二维数组。

图3

然后,利用降维技术(该技术详见《Excel公式技巧24:Excel公式中的降维技术》),将这个二维数组变成一维数组,公式如下:

=INDEX(IF((B2:E6<>''),A2:A6,''),N(IF(1,1+(INT((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(B2:E6)*COLUMNS(B2:E6)))-1)/COLUMNS(B2:E6))))),N(IF(1,1+(MOD((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(B2:E6)*COLUMNS(B2:E6)))-1),COLUMNS(B2:E6))))))

结果如下图4所示。

图4

去掉其中的空单元格,使其成为连续包含数据的单元格,使用公式:

=IFERROR(INDEX(INDEX(IF((B2:E6<>''),A2:A6,''),N(IF(1,1+(INT((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(B2:E6)*COLUMNS(B2:E6)))-1)/COLUMNS(B2:E6))))),N(IF(1,1+(MOD((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(B2:E6)*COLUMNS(B2:E6)))-1),COLUMNS(B2:E6)))))),SMALL(IF(INDEX(IF((B2:E6<>''),A2:A6,''),N(IF(1,1+(INT((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(B2:E6)*COLUMNS(B2:E6)))-1)/COLUMNS(B2:E6))))),N(IF(1,1+(MOD((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(B2:E6)*COLUMNS(B2:E6)))-1),COLUMNS(B2:E6))))))<>'',ROW(A1:A20)),ROW(A1:A20))),'')

结果如下图5所示。

图5

这就是将矩形块数据转换成单列数据的原理展示过程。同样,可以将单元格区域B2:E6转换为单列数据。

咋一看,可能被这么复杂的公式吓倒了。其实,公式里面有很多部分都是重复的,我们可以使用名称来将公式进行简化。

单击功能区“公式”选项卡中的“定义名称”来创建名称。

名称:Pos

引用位置:=Sheet1!A2:A6

名称:Data

引用位置:=Sheet1!$B$2:$E$6

名称:midArr

引用位置:

=INDEX(IF((Data<>''),Pos,''),N(IF(1,1+(INT((ROW(INDEX(A:A,1):

INDEX(A:A,ROWS(Data)*COLUMNS(Data)))-1)/COLUMNS(Data))))),

N(IF(1,1+(MOD((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(Data)*

COLUMNS(Data)))-1),COLUMNS(Data))))))

名称:midArr2

引用位置:

=INDEX(Data,N(IF(1,1+(INT((ROW(INDEX(A:A,1):INDEX(A:A,

ROWS(Data)*COLUMNS(Data)))-1)/COLUMNS(Data))))),

N(IF(1,1+(MOD((ROW(INDEX(A:A,1):INDEX(A:A,ROWS(Data)*

COLUMNS(Data)))-1),COLUMNS(Data))))))

所有定义的名称如下图6所示。

图6

这样,在上图2所示的工作表Sheet2中,选择单元格区域A2:A21,输入数组公式:

=IFERROR(INDEX(midArr,SMALL(IF(midArr<>'',ROW(A1:A20)),ROW(A1:A20))),'')

选择单元格区域B2:B21,输入数组公式:

=IFERROR(INDEX(midArr2,SMALL(IF(midArr2<>0,ROW(A1:A20)),ROW(A1:A20))),'')

结果如上图2所示。

此时,当你更新工作表Sheet1单元格区域B2:E6中的数据时,工作表Sheet2会自动更新。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。

(0)

相关推荐

  • EXCEL系列03-函数实现高级查询筛选二

    今天我为大家讲解下如何利用函数实现高级查询筛选二(有同步视频课大家可以查看),之前课程给大家讲过,主要利用查询函数VLOOKUP和逻辑函数IF实现查询筛选功能,由于用到的函数比较少,自然逻辑上有些复杂 ...

  • 学会万金油,一维表转二维表也简单!

    同学们,大家好!今天要分享的是一维表转二维表的方法,用到的函数公式是筛选公式(包括去重筛选和一对多筛选),俗称万金油.先来看下源数据和结果数据. 上图左表是源数据,它是一个户籍名单表,是个一维表:右表 ...

  • 逆透视:二维表转一维表!你可能会用到!

    你好,我是刘卓.欢迎来到我的公号,excel函数解析.逆透视是power query中的功能,非常的好用,可以将表头的信息转化到记录中,常用的就是将二维表转为一维表.今天就来分享下如何用函数做出逆透视 ...

  • 函数难搞的问题,用透视表轻松解决!

    下图左表是数据源,记录了每人多次考试的成绩.要求是查找出至少有2次不及格的姓名,成绩小于80分为不及格.结果如右表所示,第1种方法用的是函数,第2种方法用的是透视表. -01- 函数法 这个问题用函数 ...

  • Excel公式技巧106:将表数据转换成列数据

    excelperfect 这是最近一位网友问我的问题.如下图1所示,需要使用公式将单元格区域A1:D4中的数据转换成单元格区域G1:H10中的数据. 图1 刚开始看到这个问题,考虑得复杂了些,我想使用 ...

  • Excel实战技巧110:快速整理一列数据拆分成多列(使用公式)

    excelperfect 在<Excel实战技巧109:快速整理一列数据拆分成多列>中,我们使用一种巧妙的思路解决了将一列数据拆分成多列的问题.本文介绍使用公式实现的方法. 示例工作簿中的 ...

  • Excel实战技巧109:快速整理一列数据拆分成多列

    excelperfect 如果你的工作簿中的数据如下图1所示. 图1 而你想把它们转换成如下图2所示. 图2 你可以使用多种方法,包括:使用VBA,创建数组公式,编写多个公式,等等.本文将给你展示一种 ...

  • Excel公式技巧94:在不同的工作表中查找数据

    excelperfect 很多时候,我们都需要从工作簿中的各工作表中提取数据信息.如果你在给工作表命名时遵循一定的规则,那么可以将VLOOKUP函数与INDIRECT函数结合使用,以从不同的工作表中提 ...

  • Excel小技巧-一分钟内拆分成多个工作表

    在工作中,我们经常遇到需要将一个工作表根据条件拆分成多个表的情况.这里的条件有可能是部门,有可能是产品,或者地区等,今天,我们就为大家介绍一个简单易行的技巧,可以在1分钟内完成这个工作. 00 示例数 ...

  • Excel公式技巧精选

    技巧01 | 如何对带有单位的数值求和? ▼ 动画演示 ▼ 我是一条简单的公式呀,你看到了吗?=SUMPRODUCT(SUBSTITUTE(B2:B10,"元","&qu ...

  • EXCEL使用技巧之透视表分组讲解

    EXCEL使用技巧之透视表分组讲解

  • excel小技巧:考勤表中的下拉列表,升职加薪系列

    excel小技巧:考勤表中的下拉列表,升职加薪系列

  • Excel公式技巧82:查找指定值所在的单元格

    excelperfect 通常,我们会根据指定的位置查找值,例如使用VLOOKUP函数查找指定行列单元格中的值.然而,如果我们知道了某个值,需要查找这个值所在的单元格,这如何使用公式呢? 例如,下图1 ...