对于部分熟练掌握函数的小伙伴,大多采用OFFSET+COUNTA函数的方式设置下拉列表。OFFSET这个函数很有意思,他就像是函数里的特种兵,可以携带多种作战装备(如:COUNTA,MATCH等),完成包括侦察、抓捕等多种任务,能力不容小觑,如再加上不同作战小组之间的配合,更是所向披靡,坊间佳话:谁敢横刀立马,唯我OFFSET。

OFFSET的战术动作

【官方解释】OFFSET(reference,rows,cols,height,width)

Reference 作为偏移量参照系的引用区域。Reference 必须为对单元格或相连单元格区域的引用;否则,函数 OFFSET 返回错误值#VALUE!。

Rows相对于偏移量参照系的左上角单元格,上(下)偏移的行数。如果使用 5 作为参数 Rows,则说明目标引用区域的左上角单元格比 reference 低 5 行。行数可为正数(代表在起始引用的下方)或负数(代表在起始引用的上方)。

Cols 相对于偏移量参照系的左上角单元格,左(右)偏移的列数。如果使用 5 作为参数 Cols,则说明目标引用区域的左上角的单元格比 reference 靠右 5 列。列数可为正数(代表在起始引用的右边)或负数(代表在起始引用的左边)。

Height高度,即所要返回的引用区域的行数。Height 可以为负,-x表示当前行向上的x行。

Width宽度,即所要返回的引用区域的列数。Width 可以为负,-x表示当前行向左的x列。

【坊间解释】OFFSET(确立出发集合地点,行动路线“行”距离,行动路线“列”距离,作战区域长度,作战区域宽度)

集合地点: 这是行动初始最先要确定的要素,经此作为行动的起始点,这个集合地可大可小,但必须是连续区域。

路线坐标:Rows与Cols是行动路线图,前者是纵向行军步数,后者为横向行军步数,注意:这个是步数,数数的时候不能包括集合地点所在单元格。

作战区域:当然这作战只是个概称,可以是侦察、抓捕、消灭。Height作战区域的长度(行数);Width作战区域宽度(列数),注意:这个行数与列数含脚下的区域。

最终行动结果:侦察到的敌军人数或攻占区域或俘虏。

例:=OFFSET(C2,2,3,4,3)

集合地C2,行动坐标(2,3),攻占区域(4,3),行动!

图一:集合地C2,行动坐标(2,3),攻占区域(4,3),行动!

作战任务下达

作战任务:以参数表A1单元格为出发集合地,精确抓捕D列所有带有“血型名称”的敌人,对以后增援的敌人更是不能手软,来一个抓一个。

【任务解析】如果以参数表A1单元格为出发集合地(参数表!$A$1),向下行军一步(1),向右行军三步(3),即可到达敌占区,需要抓捕区域的列数也很确定:一列(即OFFSET最后一个参数为1)。现在唯一不确定的是抓捕区域的行数,如果仅仅是现有敌人的数量,抓捕6行1列即可,但以后要是敌人有增援呢?这类敌人即使有增援,也不会超过15行1列,要不先按15行1列围起来?也就是=OFFSET(参数表!$A$1,1,3,15,1),不过里面有地方有敌人,有地方没有敌人,谁能把有敌人的行数侦察清楚呢,要是总部再派二队带着高科技“侦察计数仪”(COUNTA)来就好了,这个仪器能把有敌人的战壕数得清清楚楚。

作战方案布署

作战方案:第一队围而不攻,长期驻扎;第二队技术侦察,精确抓捕。

【任务解析】

  • 特种兵一队,先行按坐标出发,到达敌战区后,按15行1列区域围而不攻,长期驻扎。
  • 特种兵二队,携带“侦察计数仪”(COUNTA),第二批次按坐标出发,到达敌战区后:第一任务是架设“侦察计数仪”,对一队包围的区域实施计数侦察,并针对增援的敌人时时监控,即时获取准确数量,即=COUNTA(OFFSET(参数表!$A$1,1,3,15,1));第二任务是以“侦察计数仪”侦察的数量作为抓捕区域长度,以1列为抓捕区域宽度,实施精确抓捕,即=OFFSET(参数表!$A$1,1,3, COUNTA(OFFSET(工作表!$A$1,1,3,15,1)),1)。


图二:双队特种兵,批次配合


清理战场

第一种方法:直接将公式写入数据验证内


图三:直接抓捕为数据验证数据源

【注意】由于要另表使用数据验证,所以公式中要有数据源表单名称,且要锁定A1。

第二种方法:将公式定义为名称


图四:先打包,再集体进入数据验证数据源

其实,人都一样,懒了还想懒,到了中级段位以后,还是不满足,这种方式设置下拉列表,还要翻到参数表去看OFFSET的坐标路线,尤其是向右行军的步数。能不能根据工作表中下拉列表设置所在列的字段名,让EXCEL自己去参数表去查向右行军的步数呢(当然工作表列所在字段名要与参数表中相应的字段名必须一致)?如何让EXCEL自己抓取下拉列表设置所在列的字段名呢?这两个问题如果都解决了,是不是一条公式就解决了所有下拉列表的设置了,而且名称管理器里只要存一个名称“参数表”就可以了。

下期文章:《EXCEL动态下拉列表高级段位-精准打击,精确匹配,要的就是这种丝滑》。