乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>EXCEL</em>:怎样定义<em>动态名称</em>?-ex

<em>EXCEL</em>:怎样定义<em>动态名称</em>?-ex

作者:乔山办公网日期:

返回目录:excel表格制作


1、假设你的数据工作表名为:sheet1,定义名称:按CTRL+F3,名称输入 data,值输入 =OFFSET(Sheet1!$A$1:$C$1,,,MATCH(9.9E+307,Sheet1!$C:$C)) 确定。
2、数据--数据透视表和数据透视图---下一步,在出现的选定区域里输入 =data ,点击“完成”。
3、将你的“型号”、“日期”项拖进行字段,数量拖进数据项。点击“型号”项右下角的下拉三角形,把“空白”的勾去掉。
4、增加或删除了sheet1的数据后,右键点击“数据透视表”,点“刷新”就自动按型号统计了。
=====================================
MATCH(9.9E+307,Sheet1!$C:$C)) 意思是找出有数据的最后一行的行号,因为你的C列是数量,是数字e799bee5baa6e59b9ee7ad94338,而9.9e+307在excel中是个非常大的数(excel极限了),所以用match来找9.9e+307这个最大的数,当然在你的数量一列中是找不到这么大的数的,所以match就返回最后一个数据,也就是C列最后的数据的行号。结合offset使用就返回你的数据区域了,定义了名称后,这个区域就是动态变化的,通过这种方法做的透视表就是动态数据透视表,只需刷新下表格结果就根着变了,不用再做一次透视了!
======================================
sort=offset(a1,1,,counta(a:a)-1,)
先解释counta(a:a),这是求A列中非数字型单元格的个数,如果你A列是姓名之类的数据就可用counta,如果是日期或者其它数字就应用count()。定义的sort名称是求的数据区域,这个区域是以A2开始,行数为A列中文本型单元格个数-1。其实以你的情况,A列中有空单元格,这种方法根本不能求到A列的数据区域!!而应该用我给你的match(9.9E+307,$C:$C)函数!
index(sort,small(if(match(sort,sort,0)=row(sort)-1,row(sort)-1),row(1:1)))
这个公式本意是求不重复的数据,if(match(sort,sort,0)=row(sort)-1,row(sort)-1)如果,match找到的数据位置和行号-1相同就返回行号-1,small(if(match(sort,sort,0)=row(sort)-1,row(sort)-1),row(1:1))求不重复数据的行号的第一个最小值,公式下拉就是第二个,第三个最小值...最后用index来返回数据。不明白你可以抹黑公式,按F9查看中间结果。

怎么个动态方式?说明一下。举例说明一下。

给你一个示例吧。

=OFFSET($A$2,,,COUNTA($A:$A)-1,)

其他的,自己修改一下就可以了

 


请说明具体需求。一般而言,可以用公式对应【相对引用】或某个值会变化的【绝对引用】形成同一个名称在不同情况下的不同值。

假如我选中B1:B10,为这个copy区域定义一个名称,可是,如果我在B11以后增加记录,还用原来的名称,B11向后就不能纳入区域进行运算了,这时就需要定义动态名称
即函数每次都计算这个列的所有记录个数,根据这个个数来设定名称区域的高度

比如某个名称的定义公式 =offset($B$1,0,0,counta(B:B))
那么就意味着这个名称所引用的区域最左上的单元格为B1,区域高度为B列记录个数(注意,两个0表是引用区域左上角单元格是以B1为起点,向下和向右各移动0个单元格,也就是B1)

相关阅读