今天在用Excel实现一个需求管理的小工具。Excel的下拉框大家一定都知道,是用数据有效性中的序列来完成的。但是他有个很明显的弊端,就是无法动态的去加入下拉列表中内容,一旦下拉列表内容需要做调整的时候,就需要一个个的重新在数据有效性中的序列中去增加,这是一个相当复杂和容易出错的工作。
如何实现这一需求?
先介绍两个Excel中很有用的两个函数:OFFSET和COUNTA。OFFSET是用来返回一个引用,引用可以是单元格或者一个单元格区域的;而COUNTA是用来返回参数列表中非空值的单元格个数。具体的语法我就不在这里描述了,大家有兴趣可以查看Excel的帮助文档。
这里我想实现这么一个具体的功能:我的Excel有一列叫“PM”,并且我想随时在下拉列表里增加“PM人选(如图一)。见图一,目前PM这列有四个人选,我想动态增加一个PM人选“巨元”,如何做?
(图一)
步骤一:借助另外一个Sheet,用某一列来定义PM人选(如图二)
(图二)
步骤二:Excel有一个叫名称管理器-定义名称,这个功能类似与我们开发语言中的全部变量,在这里我们定义一个变量名称:PM,并设置引用位置:=OFFSET(CONFIG!$C$2,1,0,COUNTA(CONFIG!$C$2:CONFIG!$C$256)-1,1);这个公式是核心,简单解释一下:
1)COUNTA(CONFIG!$C$2:CONFIG!$C$256)-1;返回值:4
2)OFFSET(CONFIG!$C$2,1,0,4,1);返回值:C3:C6的数组
1)COUNTA(CONFIG!$C$2:CONFIG!$C$256)-1;返回值:4
2)OFFSET(CONFIG!$C$2,1,0,4,1);返回值:C3:C6的数组
步骤三:在图一中的PM这列使用数据有效性的序列,来源:=PM(就是名称管理器中定义的变量);
步骤四:现在我们可以在图二中PM这列中任意增加、删除、修改内容(增加“巨元”),都会立刻动态同步到图一中的PM下拉列表(显示包括“巨元”在内的五个PM人选的下拉列表)。
大功告成。
本文转自 神相 51CTO博客,原文链接:http://blog.51cto.com/shenxiang/269217,如需转载请自行联系原作者