一户一表之用OFFSET函数制一户一表(EXCLE)
来源:网络收集 点击: 时间:2024-05-18思路:利用OFFSET函数,先分析该函数所需要的5部分内容。
第1部分reference,任意单元格均可引用(本文建议不超过B3);
第2部分rows,移动多少行用行号进行补充;
第3部分cols,移动多少列,可以不做移动,空值;
第4部分height,选择区域多少行,由家庭人数决定;
第5部分width,选择区域多少列,我们根据表格内容确定。
2/11按户制表,首先得先确定户号,而刚分析OFFSET函数需用到的行号、家庭人数,均可参阅之前发表的经验【一户一表之身份证号查询户号、姓名等信息】进行填写。

一、创建户(编)号
思路:第几户家庭,就标号为几;有几个”本人或户主“,即有几户家庭。
在第一列处插入一列,命名为【户编号】;
如图,单元格A4,输入
=COUNTIF($D$4:D4,本人或户主)
原理:以“本人或户主”作为确定每户的依据,统计单元格D4到单元格D4共有几个”本人或户主“,再配合使用单元格下拉自动填充,即可将全表按户编号。
其中,第一个D4需使用绝对引用。

二、查找所在行号
在【所在行号】右边第一个单元格输入函数
=MATCH(L11,A:A,0)
原理:查找单元格L11输入的户编号在所有的户编号A列所处的位置,即我们需要的所在行号。

三、统计家庭总人数
思路:当户(编)号相同时,即为同一户人家,有几个相同的编号,即有几人。
在【家庭人数】右边第一个单元格输入函数
=COUNTIF(A:A,L11)
原理:统计单元格L11的户编号,在A列中共有多少个。

四、查找姓名
在【姓名】右边第一个单元格输入函数
=INDEX(B:B,L14)
原理:当单元格L14的行号为35时,即为B列的第35行单元格数据,即单元格B35的数据。

五、函数OFFSET
思路:右侧空白选择一片空白区域,比如我选择20×7;
原理:20表示每户家庭人数最多20人,即20行;
7表示我需要【姓名、性别、与户主关系、出生年月、身份证号、年龄、现居住地】共7项数据,即7列。
选定好区域,再在函数旁的编辑栏输入函数
=OFFSET(B1,L14-1,,L13,7)然后同时按Ctrl+Shift+Enter键
原理:以B1为参考单元格,下移单元格L14中35减1行,右移动0行(空值),拓选区域为单元格L13中3行,共7列(即我需要7项数据)。

六、显示#N/A
实际家庭人数绝不可能有20人,即20×7全部填满,那多余的就会显示为#N/A。
去除这些#N/A,这时我们可以利用IFERROR。

七、20行数据全部相同
当家庭人数为1时,即OFFSET函数第4部分,拓选区域的行为1时,会把2-20行填充的和第1行数据相同。(不知这是BUG还是什么原因,本人使用微软2007版EXCLE和WPS2019版均会出现该问题)

八、去除#N/A和重复数据
1、另选空白区域,或者新建一份表格。
2、第一行;
第一个单元格直接输入“=”,加上刚才OFFSET函数所得出结果的单元格;如图所示,输入
=N4,即引用N4单元格的数据;
当单元格右下角变成小“+”号时右拉填充。
思路:每户至少有1人,所以第一行数据不用怎么变更,直接用“=”引用即可。

3、第二至二十行
思路:以家庭人数1作为条件,进行设置;
第二行第一个单元格,输入
=IF($L$13=1,,IF($L$131,IFERROR(N5,)))
原理:该函数组使用了3个函数,
第①个函数IF——当绝对引用的单元格L13即家庭人数为1时,现在第二行开始的单元格,直接显示为空值,否则进入第②个函数IF——当绝对引用的单元格L13即家庭人数大于1时,则进入第③个函数IFERROR——当引用的值,比如单元格N5,如果N5出现#N/A,则显示空值,否则显示N5的值。
当单元格右下角变成小“+”号时右拉填充,再向下填充。

1、其中【查找姓名】可用于检测后续单元格引用后是否出错
2、本文中OFFSET的reference为该列第几个,则rows下移行数就要减几。例:以B3为参考,则reference为B3,而rows为L14-3
3、本文中OFFSET的reference不建议超过第3行,即B3,否则cols下移动行数需出现负数,以保证是向上移动
4、OFFSET函数需同时按Ctrl+Shift+Enter键进行引用
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_792343.html