在数据列中重复指定次数的文本,与单元格重复文本次数是不一样的,后者只要使用文本重复函数rept就可以达成目的。
而在数据列来重复指定次数的文本, 我们先来看下这个效果图:
从动图可见,数据列的内容是根据文本重复的指定次数来自动填充的。
既然是使用vlookup函数来求解,那么该怎么来写这个公式呢?
其实我们可以借鉴vlookup搭配辅助区间或辅助列的用法,比如区间引用场景。
但在这个场景中,它看似类似于区间引用,但性质完全不一样,数据表中的重复次数的数值是要重复的次数,而不是要引用的值。
因此我们需要重新添加辅助列,如下图所示,在A列的A2单元格输入一个sum求和运算公式:
=SUM($C$1:C1)+1
这个公式的作用是累计求和总的文本重复次数,而计算累计重复次数则是为了设置vlookup函数表达式的第1参数——查询列表。
这里要注意sum函数的参数使用了混合引用,要注意引用符号的输入!
此时,作者在E2单元格输入一个vlookup函数公式:
=IFERROR(VLOOKUP(ROW(A1),$A$2:$B$6,2,0),E1)&””
首先来看公式中vlookup函数表达式,其第1参数是row函数,row函数随公式填充会产生动态的结果值,比如ROW(A1)等于1,下拉公式到A2单元格,则为ROW(A2),等于2.
然后设置$A$2:$B$6区域为查找区域,并返回第2列,查找类型为精确查找。
现在来看下它的运算逻辑,当查找值ROW(A1)等于1,它会查询查找区域首列,即A列列表中等于1的值,我们可以从数据表的A列中看到值1所处的位置,这时返回列B列对应的值是“张三”;
接着ROW(A2)等于2,由于是精确查找,查找值2在查询列中并不存在,因此根据iferror函数的参数设置,会返回E2单元格的值,也就是刚才引用出来的“张三”!
当公式下拉到E5单元格,此时公式中的row函数为ROW(A4),其结果等于4,这时再查询A列中的数字,则要匹配数字4,因此返回值4对应的B列文本,即“李四”。
按照这个规则,依次向下匹配,直到重复完最后一个文本的最后一次,此时最后一个文本不是“赵六”,而是一个空值,即单元格B6的值,这是因为B6单元格实际是属于vlookup函数查找区域中的单元格之一。
如何描述这段话的含义?
当公式填充到row(A19)的时候,结果等于19,从辅助列可见,值19对应的文本是一个空值,而当公式继续下拉到A19之后,它在查询列中是匹配不到对应值的,因此根据iferror函数的规则,将返回上一个单元格的值,也就是空值。
具体的公式逻辑作者已经阐述了一遍,如果还有不懂的地方,可以辅助公式到数据表中进行练习,然后逐步解析公式去理解其含义。