个人觉得:用列表定义名称的方式来动态引用会比offset(如常见的=Offset($A$4,,,counta(A:A)-3))好些,阐述如下: 1、不用费劲地去写公式,尤其是多列要定义名称,用offset还要一个个去改,碰上喜欢合并单元格(大多人都会用合并单元格作标题之类的),这就往往在counta后面减去一个数问题上不一致,连改名称里的公式都要注意。 而用列表功能,只需要:插入〉名称〉指定〉首行并选择列表区域——一次性定义多个名称。要做仅仅是选择区域、创建列表而已。 2、offset+counta存在一个弊病:比如要引用的数据在A1:A100,我们在后面又输入一些东西,比如A101:A103为空单元格,而我们在A103下面写入东西,counta后面减去的数要手工去修改,否则引用区域就把A101等空单元格包含进去,空单元格在一些函数计算中可能造成运算不便的情况。要是A101:A103是我们特地空的,而A104有数据是可能影响运算结果的,由于后面输入的数据多,把A104包含进去,更是不妙! 而列表功能,我们在列表范围之外(指的是列表下面隔一行之后)输入东西,比如列表在A1:A100,我们在A102输入东西不会影响列表。如果我们想扩展列表的区域,在A101输入就自动扩展了。 再次补充一点:
czzqb兄提出了用offset+counta由于Offset函数的易失性会引起重新计算问题,列表功能定义名称的引用是对“单元格区域”的引用,没有使用任何函数,不会引起重算(打开文件不做任何修改并关闭,会提示保存的便是使用了易失性函数引起重算)。这也是个优势!——2006-3-19 推广建议:鉴于以上比较,对于动态引用单元格区域的采取区分数据由来而使用的建议,具体如下:
1、原始表格区域的引用,用于数据不断增加时希望能够引用该区域的公式能自动更新——用列表区域。
2、公式得出区域的引用,无法预知有效数据个数的情况,比如常见的单列求不重复值,我们不能确定个数,用公式多拉动复制产生多余的""或者错误区域,再用这个区域作为数据有效性引用时需要定义名称,这种情况用offset最合适不过了。
不过已经不能用offset+counta了,该把counta改为countif(Range,"><")——文本,或count(range)——数字,或者sum(--(range<>""))——通用。2006-3-30补充 此外,我经常在建议使用“列表”定义动态名称,并非我就要摒弃Offset,有的时候,2种方法可以结合起来用,尤其是当“列表字段较多、或者字段字段名有重复”的情况下,你可以只用“局部”作“列表”实现动态,然后再用“列表定义的动态名称”作Offset的第一参数来偏移(这样的offset公式就很简单了)达到引用其他部位也能随着行数数据的增加而变化的效果。2006-4-23补充 呵呵,这个帖子打满补丁了:“并非我就要摒弃Offset”——如果能摒弃用Offset作的动态引用定义名称的就摒弃吧。A1:index(A:A,……)这类的引用就可以在一定程度上替代了。见附件:
uJq2806q.rar
(9.82 KB, 下载次数: 1136)
2006-5-8
[此贴子已经被作者于2006-5-8 21:29:19编辑过] |