请EXCEL函数高手帮忙设计数组公式

2025-06-26 12:47:41
推荐回答(3个)
回答1:

1.在B4中输入或复制粘贴下列公式

=INDEX($1:$1,SMALL(IF($B$1:$F$1=$F4,256,COLUMN($B:$F)),COLUMN(A1)))&""

按三键CTRL+SHIFT+ENTER结束公式输入

下拉填充,右拉填充

在G4中输入或复制粘贴下列公式

=IFERROR(VLOOKUP(F4,Q4:R4,2,),"")

下拉填充

在T4中输入或复制粘贴下列公式

=SUBSTITUTE(SUBSTITUTE(B4,$H4,$L4),$I4,$M4)

下拉填充,右拉填充

在X4中输入或复制粘贴下列公式

=IF(G4<>"",G4,F4)

下拉填充

T:X列为实际值班表。

你对比一下B:R共17列与T:X共5列单元格之间的结果,就知道休假顶班的情况已经通过VLOOKUP和SUBSTITUTE函数处理完毕了。

如果5个人全休假,SUBSTITUTE要嵌套5次。上面有2人休假,SUBSTITUTE只嵌套了2次。

回答2:

这位度友,建议你的排班表重新设计一下:下面这张表基本能够实现你的需求,说明如下:

1、班次可以设计为“早班、中班、公休、”,可以加入“早顶班”"中顶班",在数据有效性中设计;2、上班记录,通过下拉按键来实现,总体可以通过背景颜色一目了然;3、每个人上班的次数可以通过最后的公式来统计,同时灵活平衡每人班次。4、每个月只需要你更改一下年月值C2,其他应变的,D2 =TEXT($C2&"-"&D$1,"aaaa"),  统计公式:AI3=COUNTIF($D3:$AH3,$AI$1),AJ3==COUNTIF($D3:$AH3,$AJ$1),AK3==COUNTIF($D3:$AH3,$AK$1)

不知是否满意,可以再交流。

回答3:


  1. 少掉的部分是省略的参数,省略参数的默认值请自行百度。

index(reference,row,col,aera)

本例中reference 是b:b

row是small(if($d$2:$d$11=$b$13,row($d$2:$d$11),100),row(1:1))

其余两参数省回复,默认为1,不理解可以选中公式的一部分,按F9查看结果,这样便于理解,查看完成后ALT+Z返回。

small 函数返回数组中指定的第几小的数值,本例中if($d$2:$d$11=$b$13,row($d$2:$d$11),100)返回的是一个由行号组成的数组,ROW(1:1)为small函数的第二参数,下拉时变成row(2:2),row(3:3)等,依次取最小,第二小....

2.&""原意是为了把结果转换成文本,但是在这里是另外作用,当符合条件的行号都提取完后,就提取100行的数据,100行应该是空行,提取出来显示的是0,用了&""以后,0就被屏蔽掉了,显示为空。