知识点:INDEX函数
INDEX函数用来返回表或区域中的值或值的引用。函数有两种形式:数组和引用。
数组形式通常用来返回数值或数组数值,引用形式通常返回引用,这里我们学习到得是数组形式。
函数语法INDEX(array,row_num,column_num)array:为单元格区域或数组常量。如果数组值包含一行或以列,则只要选择相对应的一个参数row_num或column_num.如果数组有多行或多列,但是只使用row_num或column_num,INDEX函数则返回数组中的整行或整列,且返回值也为数组。
row_num:为数组中的某行的行序号,函数从该行返回数值。如果省略row_num,则必须有column_num.
column _ num:为数组中某列的序列号,函数从该列返回数值。如果省略column_num,则必须有row_num.
函数说明如果同时使用row_num和column_num,INDEX函数则返回row_num和column_num交叉处的单元格的数值。
知识点:ROW函数
ROW函数用来返回引用的行号。
函数语法ROW(reference)Reference:为需要得到其行号的单元格或单元格区域。
函数说明如果省略reference,则指ROW函数对所在单元格的引用。如果reference为一个单元格区域,并且ROW函数作为垂直数组输入,ROW函数则将reference的行号以垂直数组的形式返回。
知识点:COLUMN函数
COLUMN函数用来返回给定引用的列标。
函数语法COLUMN(reference)Reference:为需要得到其列标的单元格或单元格区域。
函数说明如果省略reference,则假定为是对COLUMN函数所在的单元格的引用。如果reference为一个单元格区域,并且COLUMN函数作为水平数组输入,COLUMN函数则将reference中的列标以水平数组形式返回。
本例公式说明=IF(MOD(ROW(),3)=0,“”,IF(MOD(ROW(),3)=1,工资明细表!A$3,INDEX(工资明细表!$A:$Q,INT((ROW()-1)/3)+4,COLUMN())))首先分析INDEX(工资明细表!$A:$Q, INT( (ROW( ) -1) /3)+4,其中行参数为INT((ROW()-1)/3)+4,如果在第一行输入该参数,结果是4,向下拖拽公式治20行,可以看到结果是4;4;4;5;5;5;5;6;6;6……如果用“INT((ROW()-1)/3)+4”做INDEX的行参数,公式将连续3行重复返回指定区域内的第4、5、6行的内容,而指定区域是“工资明细表”工作表,第四行以下是人员记录的第一行,这样就可以每隔3行得到下一条记录。用COLUMN()做INDEX的列参数,当公式向右侧拖拽时,列参数COLUMN()也随之增加。
如果公式到此为止,返回的结果是每隔连续3行显示下一条记录,与期望的结果还有一定的差距。希望得到的结果是第一行显示字段、第二行显示记录、第三行为空,这就需要做判断取值。如果当前行是第一行或是3的整数倍加1行,结果返回“工资明细表”
工作表的字段行。如果当前行是第二行或是3的整数倍加两行,公式返回INDEX的结果;如果当前行是3的整数倍行,公式返回空。
公式中的第一个IF判断IF(MOD(ROW(),3)=0,“”,******)用来判断3的整数倍行的情况,如果判断结果为“真”则返回空,第二个判断IF(MOD(ROW(),3)=1,工资明细表!A$3,******)用来判断3的整数倍加1时的情况,判断结果为“真”则返回工资明细表!A$3即字段行的内容;余下的情况则返回INDEX函数段的结果。