我要投稿 | RSS
您当前的位置:首页 > Excel公式

在Excel表格中按一定条件进行归类整理,index+small+if,offset+small+if

作者:韩志华      来源:原创

  假设一下情况:

  左侧是我们的原始数据,有姓名,以及每个人对应所在的班级,但可能存在比较乱的情况(一年级,二年级,三年级杂乱排列的)

  要求:

  把不同的年级进行一下整理,整理成右侧的格式。

  各个年级的分别显示到对应的一行当中。

方法/步骤1:

  在E2单元格输入:

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B$9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

  按Ctrl+shift+回车,向右拖拽公式,向下拖拽公式,即可实现一二三年级对应的人员姓名。

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B$9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

  要显示的内容区域,并加以锁定$,可以通过按F4进行添加锁定符$。

  在这里,我们要显示的是姓名,所以,要选择姓名部分。

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B$9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

  条件区域中要求的条件。

  年级区域所对应的一年级,二年级,三年级等,$D2在这里,只锁定列,是因为下拉的时候,要自动变成二年级,三年级。

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B$9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

  这一节可以变成ROW($a$1:$a$9),ROW($c$1:$c$9),都是可以的。

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B$9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

  是4的8次方,也就是一个很大的数,根据实际,只要是比你原数据还要大的行数就行,比如,你的原数据有2000行,你输入一个3000也行。

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B$9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

  这一个参数,是右拉的时候,会自动调取符合条件的第几个值。

  比如,符合条件为一年级的,区域在姓名列中,找到第一个姓名,右拉再找到第二个,再右拉找到第3个。依次……

  =INDEX($A$1:$A9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)))&""

上面和下面的2种写法都可以

  =INDEX($A$1:$A$9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B$9),4^8),COLUMN(A1)))&""

方法/步骤2:

  下面分层介绍,if返回一个一维数组,if(条件,为真则返回,为假则返回),IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),如果与D2单元格值相同则反馈B列单元格的行号,如果为假,则返回4^8即65536(97-03版excel单元格个数),所以if函数最终返回值要么是指定单元格对于行号,要么是65536(数据量较大时需具体分析)

方法/步骤3:

  small返回数组中第K个最小值,small(array,k),此处将if函数返回的数组作为small的第一参数,返回数组中第COLUMN(A1)个最小值,E列为COLUMN(A1)=1,即第一个最小值,F 列为第二个最小值,以此类推,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)),所以small函数最终返回的是if函数里的行号

方法/步骤4:

  最后是index函数,返回行列交叉单元格的值,index(array,row_num,[column_num]),small函数作为index的第二个参数,与array即$A$1:$A9交叉处即为需要返回的值。

方法/步骤5:

  &""是为了避免0值得出现,在右拉后,如果结果已全部查询完毕,可能会出现错误提示,可将公式嵌套到iferror中,=IFERROR(INDEX($A$1:$A9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)))&"","") 完成后三键齐按(ctrl+shift+回车)即可。

  除了使用index配合small和if使用外,也可以使用offset配合small和if来进行使用。

60dd8661bb4fe39d6431b51d46aa2ac5.zip
60dd8661bb4fe39d6431b51d46aa2ac5.zip (38.13 KB)
来顶一下
返回首页
返回首页
推荐资讯
{SUM函数}:计算单元格区域中所有数值的和
{SUM函数}:计算单元
LEFT函数:从一个文本字符串的第一个字符开始返回指定个数的字符
LEFT函数:从一个文本
MID函数:从文本字符串中指定的起始位置起返回指定长度的字符
MID函数:从文本字符
column函数:返回一引用的列号
column函数:返回一引
扫一扫微信二维码,联系作者:韩志华
相关文章
    无相关信息
栏目更新
栏目热门