欢迎大家来到IT世界,在知识的湖畔探索吧!
问题求助SOS:一个单元格内有多个数字,如何让下一个单元格加1往后延续。比如A2内有1、2、3、4、5五个数字,如何让A3生成6、7、8、9、10(A3生成的个数由B3中的“5”决定的,并且A3是A2末尾数字加1往后延续的)。
单看问题的描述是不是有些绕,没关系,我们再次整理一下提干。
如下图所示:
B列数据为已知的个数。我们要根据指定的数字个数,在右侧单元格生成数量一致的序号,序号由1开始。每个单元格内的从左往右方向上的序号顺序递增的,垂直方向下不同单元格内的序号首尾要衔接连贯,也是顺序递增的。
欢迎大家来到IT世界,在知识的湖畔探索吧!
这个问题,相当考验我们对问题的独立思考与解决能力。我们用的的核心函数是offset函数。offset函数是一个超级偏移高手:根据个数,获取上下左右连续编号。而其中最重要的精髓在于offset与row函数的配合上。下面我们分步骤逐步解析。
第一步:个数的累计求和
使用SUM函数:
=SUM($B$1:B1)
做一个对B列“已知个数”的累计求和(非常经典)。注意累计求和区域$B$1:B1是从B1单元格(列标题)为起始位置开始的,且位置绝对固定。
第二步:偏移取值
使用OFFSET函数:
=OFFSET($A$1,SUM($B$1:B1),0,B2)
在Excel或WPS表格中,OFFSET函数属于引用类函数。它以指定的单元格或单元格区域为参照系,通过给定的偏移量、行数及列数返回一个新的引用。
公式结构:
=OFFSET(起始点, 行偏移量, 列偏移量, [高度], [宽度])
起始点:基准单元格(如$B$1)。
行偏移量:向下移动的行数(正数)或向上移动(负数)。
列偏移量:向右移动的列数(正数)或向左移动(负数)。
[高度]/[宽度]:可选参数,用于返回区域的行列数。
所以本例中:我们以固定的$A$1单元格为参照系起始点,分别向下偏移上一步的累计值(SUM($B$1:B1))个单元格,左/右方向不偏移,偏移结束时返回的高度为B2(已知个数)的高度。
我们逐个看一下OFFSET函数的作用变化,感受它的原理:
C列为第一步SUM累计求和的返回结果,我们用于视觉参考。
D2单元格公式(原第二步C2单元格)
=OFFSET($A$1,SUM($B$1:B1),0,B2)
以A1为固定起始点,向下偏移0个单元格,向右偏移0个单元格,偏移后返回的高度为3个单元格(B2)。
也就是说最终偏移后的范围是:A1:A3区域。
向下填充公式,E3单元格公式(原第二步C3单元格)
=OFFSET($A$1,SUM($B$1:B2),0,B3)
以A1为固定起始点,向下偏移3个单元格,向右偏移0个单元格,偏移后返回的高度为2个单元格(B3)。
也就是说最终偏移后的范围是:A4:A5区域。
向下填充公式,F4单元格公式(原第二步C4单元格)
=OFFSET($A$1,SUM($B$1:B3),0,B4)
以A1为固定起始点,向下偏移5个单元格,向右偏移0个单元格,偏移后返回的高度为1个单元格(B4)。
也就是说最终偏移后的范围是:A6区域。
向下填充公式,G5单元格公式(原第二步C5单元格)
=OFFSET($A$1,SUM($B$1:B4),0,B5)
以A1为固定起始点,向下偏移6个单元格,向右偏移0个单元格,偏移后返回的高度为4个单元格(B5)。
也就是说最终偏移后的范围是:A7:A10区域。
第三步:获取行号(即编码)
使用ROW函数:
=ROW(OFFSET($A$1,SUM($B$1:B1),0,B2))
分别获取上一步OFFSET函数返回的4组偏移区域的行号:
A1:A3→行号{1;2;3}
A4:A5→行号{4;5}
A6→行号{6}
A7:A10→行号{7;8;9;10}
我们惊喜的发现:
获取到的行号即为C列需要填充的编号。
使用TOROW函数:
=TOROW(ROW(OFFSET($A$1,SUM($B$1:B1),0,B2)))
将上述返回结果分别转置到一行不同单元格中显示。
最后运用TEXTJOIN函数:
=TEXTJOIN(” “,,TOROW(ROW(OFFSET($A$1,SUM($B$1:B1),0,B2))))
将每行不同单元格中的编码分别合并到一个单元格中显示,分隔符用空格表示(双引号之间加一个空格)。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/137807.html