解释Excel数据有效性中的公式
解释公式:“=OFFSET($A$1,1,MATCH(G2,A1:E1,)-1,COUNTA(INDIRECT("C"&MATCH(G2,A1:E1,),0))-1,1)” 详见附件。
1、理解了“INDIRECT("C"&MATCH(G2,A1:E1,),0))”返回值C1或C2等,为R1C1引用样式,即表示为第1列、第2列等,你的问题即迎刃而解。 2、“COUNTA(INDIRECT("C"&MATCH(G2,A1:E1,),0))-1”是统计指定列的非空单元格数量,因你在A列的11、12行输入“G2数据有效性...”和“H2数据有效性...”,致使统计数量不准确,故“当G2选择‘部门A’时出现错误”。若将者两行文字放到标注框或文本框里,即使仍在A11、A12位置,也不会影响公式的正确使用。 供参考了。
这个公式,难理解就在于对单元格的引用格式是R1C1的模式,不是A1模式, COUNTA(INDIRECT("C"&MATCH(G2,A1:E1,),0))-1 得出来的是假如C5并不是A1格式下的C5单元格,而是第五列, indirect(n1,n2)中的第二个参数为1或省略时,代表A1形式引用,0代表R1C1形式引用. 其实这个公式可以改为A1形式下的公式 =OFFSET($A$1,1,MATCH(G2,A1:E1,)-1,COUNTA(A:A)-1,1) A:A是相对引用. OFFSET()函数不用解释吧.
问题1: 先要了解一下INDIRECT()的工作原理,第一个参数的意思是一个表示单元格引用的字符串,第二个参数是引用的类型(是A1样式,还是RC样式的,详细可查看系统帮助),这是参数的值为0,是RC样式。MATCH(G2,A1:E1,)返回G2在A1:E1中的位置,和“C”组合后就告诉INDIRECT()函数是引用了第MATCH(G2,A1:E1,)列 COUNTA()的作用就是统计第MATCH(G2,A1:E1,)列中单元格的数量,减去1后返回的是除标题外的数据数量,使用OFFSET()函数指标偏移的横纵坐标,就会返回标题为G2的子记录所在单元格区域,定义成数据有效性后可以实现动态引用。
问题2: OFFSET()实现动态引用是依据COUNTA()计算出来的数字进行偏移计算的,如果你在COUNTA()所统计的这个列内数据是不连续出现或者下面添加了其他无谓的数据后,结果会不正确。也就是说,保证存放这些记录的列的数据要连续,同时不要在这个数据列下面再输入其他不相关的内容。
答:已用条件格式的公式做到: 如果M列有05,N列就不能为空或写无,如果不能满足这个要求就给出出错警告; 如果M列没有05,N列就为空或写无,如果不能满足这个要求就...详情>>