【Excel】将一列数据按内容不同分为多列-index函数的应用

目标:
将一列数据按照内容不同,分为多列。
【案例】将不同【分支机构】的【时长】单独统计出来。
数据源如下:
【Excel】将一列数据按内容不同分为多列-index函数的应用_第1张图片
期望得到如下表格:
【Excel】将一列数据按内容不同分为多列-index函数的应用_第2张图片
【步骤一】
1.1在【F2】单元格中输入公式
=INDEX($ B:$ B,SMALL(IF(A:A=$ D$ 2,ROW(A:A),4^8),ROW(A1)))&""
1.2语法解释:INDEX(单元格区域,行号,列号)
①目标单元格区域:B列;
②行号:SMALL(IF(A:A=$D 2 , R O W ( A : A ) , 4 8 ) , R O W ( A 1 ) ) 其 中 , I F ( A : A = 2,ROW(A:A),4^8),ROW(A1)) 其中,IF(A:A= 2,ROW(A:A),48),ROW(A1))IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 返 回 的 是 一 个 数 组 , 解 释 如 下 : 1 ) 将 A 列 中 存 储 的 所 有 数 值 与 【 D 2 】 单 元 格 逐 一 匹 配 , 若 相 等 , 则 返 回 当 前 可 匹 配 数 值 的 行 号 ; 若 不 等 , 则 返 回 一 个 超 大 的 数 值 , 这 里 选 定 为 4 8 ( 原 因 : 4 的 8 次 方 65536 是 03 版 本 E X C E L 的 最 大 行 数 。 03 版 本 时 候 , 一 般 认 为 该 行 的 数 据 是 空 白 的 , 在 老 版 的 查 询 公 式 写 法 中 , 会 用 这 个 数 返 回 该 行 的 数 据 , 用 于 屏 蔽 零 值 ) 因 为 公 式 中 用 到 了 s m a l l 函 数 , 所 以 使 用 一 个 超 大 数 值 替 代 不 符 合 i f 条 件 的 数 值 , 使 其 在 s m a l l 函 数 中 不 被 返 回 , 即 超 出 我 们 原 数 据 有 效 范 围 即 可 ( 如 本 例 中 有 17 个 行 号 , 这 个 数 值 > = 18 就 可 以 了 ) 。 2 ) 那 么 具 体 I F ( A : A = 2,ROW(A:A),4^8)返回的是一个数组,解释如下: 1)将A列中存储的所有数值与【D2】单元格逐一匹配,若相等,则返回当前可匹配数值的行号;若不等,则返回一个超大的数值,这里选定为4^8(原因:4的8次方65536是03版本EXCEL的最大行数。03版本时候,一般认为该行的数据是空白的,在老版的查询公式写法中,会用这个数返回该行的数据,用于屏蔽零值) 因为公式中用到了small函数,所以使用一个超大数值替代不符合if条件的数值,使其在small函数中不被返回,即超出我们原数据有效范围即可(如本例中有17个行号,这个数值>=18就可以了)。 2)那么具体IF(A:A= 2,ROW(A:A),48)1AD248486553603EXCEL03small使if使small17>=182IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 返 回 的 数 组 是 什 么 呢 ? 从 数 据 源 表 可 以 看 出 , A 1 的 值 是 “ 分 支 机 构 ” , A 1 ! = D 2 , 那 么 返 回 4 8 , 即 数 组 I F ( A : A = 2,ROW(A:A),4^8)返回的数组是什么呢? 从数据源表可以看出,A1的值是“分支机构”,A1!=D2,那么返回4^8,即数组IF(A:A= 2,ROW(A:A),48)A1A1=D248IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 的 第 一 个 返 回 值 是 4 8 , 同 理 , A 2 单 元 格 的 值 是 “ 安 徽 分 公 司 ” , 显 然 A 2 ! = D 2 , 那 么 数 组 I F ( A : A = 2,ROW(A:A),4^8)的第一个返回值是4 ^8,同理,A2单元格的值是“安徽分公司”,显然A2!=D2,那么数组IF(A:A= 2,ROW(A:A),4848A2A2=D2IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 的 第 二 个 元 素 也 是 4 8 ; 同 理 因 为 A 3 ! = D 2 , 所 以 数 组 I F ( A : A = 2,ROW(A:A),4^8)的第二个元素也是4 ^8;同理因为A3!=D2,所以数组IF(A:A= 2,ROW(A:A),4848A3=D2IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 的 第 三 个 元 素 也 是 4 8 ; 而 A 4 单 元 格 的 值 是 “ 重 庆 分 公 司 ” , A 4 = D 2 , 这 时 数 组 I F ( A : A = 2,ROW(A:A),4^8)的第三个元素也是4 ^8;而A4单元格的值是“重庆分公司”,A4=D2,这时数组IF(A:A= 2,ROW(A:A),4848A4A4=D2IF(A:A=D 2 , R O W ( A : A ) , 4 8 ) 返 回 A 4 所 在 行 号 , 即 4 。 因 为 A 5 = D 2 , 所 以 数 组 I F ( A : A = 2,ROW(A:A),4^8)返回A4所在行号,即4。因为A5=D2,所以数组IF(A:A= 2,ROW(A:A),48A44A5=D2IF(A:A=D$2,ROW(A:A),4^8)返回A5单元格的行号5。
到时,目前数组中存储的数据为{65536 ,65536,65536,4,5,…},同理,A列的所有数据与D2逐一进行对比,得到if函数的数组为{65536 ,65536,65536,4,5,6,65536 ,65536,65536,…65536}(该数组中共有65536个元素。如果将4^8改为20,则该数组有20个元素)。
3)在此if函数返回数组的外层,是small函数。
计算完if函数后,则small变为({65536 ,65536,65536,4,5,6,65536 ,65536,65536,…65536},row(A1)),其中row(A1)返回值为数字1。
small(单元格区域或数组,K)函数语法含义:在一列数值中,按从小到大的顺序返回第K个值。
那么在此small函数中,返回值就是if数组中按从小到大排序后的第1个值,即4。
4)这时外层的index函数即为index(B:B,4),在B列中返回第4行的数值,即B4单元格的【28】。
5)index函数后面加上了【""】。
&是文本合并运算符,"“是空文本,公式【&”"】表示将公式的运算结果与空文本合并。它的作用是用空文本替代返回值中的错误值。
如果没有【&""】则结果如下:
【Excel】将一列数据按内容不同分为多列-index函数的应用_第3张图片
1.3在【F2】中输入数组公式以后,按shift+ctrl+enter。
【Excel】将一列数据按内容不同分为多列-index函数的应用_第4张图片
【步骤二】
将【F2】的公式向下拖动,将公式填充到下面足够多的单元格中(可以与数据源的个数保持一致,因为返回结果不会超过数据源个数)
【步骤三】
利用数据有效性,将【D2】单元格做成下拉框,这样数据就可以变动了。(略)
【Excel】将一列数据按内容不同分为多列-index函数的应用_第5张图片
【注意】公式中,if函数的比较值范围要与返回行号完全对应。
即下面标红的部分要保持一致。
在这里插入图片描述
完成。

你可能感兴趣的:(Excel,excel)