
问题描述
A 列是对应的名字,B 列是指定的重复次数,需要在 C 列输出每个名字按指定次数重复后的结果。
示例数据:
小明 → 重复 3 次 → 小明小明小明
小红 → 重复 2 次 → 小红小红
小刚 → 重复 4 次 → 小刚小刚小刚小刚
解决方案概述
本教程采用 TEXTJOIN + SEQUENCE 动态数组法。这是 Excel 365 / Excel 2021 引入的现代化数组思维解法,核心思路是:先用 SEQUENCE 生成一个序号数组作为"骨架",再用 IF 把数组中的每个数字替换为目标文本,最后用 TEXTJOIN 将数组中的所有文本元素合并成一个完整字符串。
相比传统的 REPT 函数,这种方法虽然步骤更多,但能让你深入理解 Excel 动态数组的工作机制,而且后续可扩展性更强(例如加入分隔符、条件判断等)。
步骤详解
步骤 1:准备原始数据

首先,在 Excel 中建立包含三列的数据表。A 列命名为"名字",用于存放需要重复的原始文本;B 列命名为"重复次数",用于指定每个名字需要重复的次数;C 列命名为"输出结果",目前保持空白,这里将填入我们的动态数组公式。
在示例中,我们准备了三行数据:小明的重复次数是 3,小红是 2,小刚是 4。确保 B 列的数据格式为数值型,因为后续公式会直接引用这些数字来生成数组。如果 B 列是文本格式(例如数字前面有单引号),SEQUENCE 函数会报错。
步骤 2:SEQUENCE 函数生成序号数组

涉及公式:=SEQUENCE(1, B2)
第1个参数
1:指定生成数组的行数为 1 行第2个参数
B2:指定生成数组的列数,这里引用 B2 单元格的值(3)
SEQUENCE 是 Excel 365 的核心动态数组函数之一,用于自动生成数字序列。当我们输入 =SEQUENCE(1, B2) 时,Excel 会根据 B2 的值(3)生成一个横向的一维数组:{1, 2, 3}。
这个数组不会显示在单个单元格中,而是会溢出到相邻的多个单元格。你可以把它理解为:为后续的文本重复操作搭建了一个"有 3 个位置的骨架"。每一个位置最终都会被替换成我们想要重复的文本。
步骤 3:IF 函数构建重复文本数组

涉及公式:=IF(SEQUENCE(1, B2) > 0, A2, "")
条件
SEQUENCE(1,B2) > 0:判断数组中的每个元素是否大于 0条件为真时返回
A2:返回 A2 单元格的文本值("小明")条件为假时返回
"":返回空文本
在上一步中,我们得到了数组 {1, 2, 3}。现在用 IF 函数对这个数组进行"映射":因为数组中的 1、2、3 都大于 0,所以条件始终成立,IF 会把数组中的每一个数字都替换成 A2 的值 "小明"。
最终得到的新数组是 {"小明", "小明", "小明"}。这一步是把"重复次数"转化为"重复文本数组"的关键。如果把 > 0 改成其他条件(例如 <= B2),甚至可以实现更复杂的逻辑控制,比如只重复前 N 个中的某几个。
步骤 4:TEXTJOIN 合并数组为最终文本

涉及公式:=TEXTJOIN("", TRUE, IF(SEQUENCE(1, B2) > 0, A2, ""))
第1个参数
"":分隔符,这里是空字符串,表示元素之间不加任何分隔第2个参数
TRUE:逻辑值,表示忽略数组中的空值第3个参数
IF(...):上一步生成的重复文本数组
TEXTJOIN 函数的作用是将多个文本字符串合并成一个。与普通的文本连接符 & 不同,TEXTJOIN 可以一次性处理整个数组,非常适合配合动态数组使用。
在这一步中,TEXTJOIN 接收到了上一步生成的数组 {"小明", "小明", "小明"},由于分隔符是空字符串 "",三个"小明"会直接拼接成 "小明小明小明"。第二个参数 TRUE 的作用是:如果数组中有空值(例如某些条件下 IF 返回了 ""),TEXTJOIN 会自动跳过它们,避免结果中出现多余的空位。
步骤 5:输入完整公式并下拉填充

完整公式:
=TEXTJOIN("",TRUE,IF(SEQUENCE(1,B2) > 0,A2,""))在 C2 单元格输入上述完整公式后,按 Enter 键确认。由于这是动态数组公式,Excel 365 会自动计算出结果并显示在 C2 中。如果公式正确,你应该能看到 C2 显示为 "小明小明小明"。
接下来,选中 C2 单元格,将鼠标移动到单元格右下角的小方块(填充柄)上,当光标变成黑色十字时,向下拖动到 C4 单元格。公式会自动复制到 C3 和 C4,并且由于使用了相对引用(A2、B2),每行都会自动引用对应的名字和次数:
C3 的公式会自动变为
=TEXTJOIN("", TRUE, IF(SEQUENCE(1, B3) > 0, A3, ""))C4 的公式会自动变为
=TEXTJOIN("", TRUE, IF(SEQUENCE(1, B4) > 0, A4, ""))
这样就实现了批量处理,一次性完成了所有数据的重复填充。
完整公式汇总
| 单元格 | 公式 | 作用 |
|---|---|---|
| C2 | =TEXTJOIN("", TRUE, IF(SEQUENCE(1, B2) > 0, A2, "")) | 将 A2 文本按 B2 次数重复 |
| C3 | =TEXTJOIN("", TRUE, IF(SEQUENCE(1, B3) > 0, A3, "")) | 将 A3 文本按 B3 次数重复 |
| C4 | =TEXTJOIN("", TRUE, IF(SEQUENCE(1, B4) > 0, A4, "")) | 将 A4 文本按 B4 次数重复 |
扩展思考
1. 如果想在重复文本之间加分隔符怎么办?
只需修改 TEXTJOIN 的第一个参数即可:
=TEXTJOIN("、",TRUE,IF(SEQUENCE(1,B2) > 0,A2,""))结果会变成:小明、小明、小明
2. 常见错误排查
#NAME? 错误:你的 Excel 版本不支持
SEQUENCE或TEXTJOIN函数(需 Excel 365 / 2021 / 网页版)#VALUE! 错误:检查 B 列是否为数值格式,而非文本格式
只显示一个名字:旧版 Excel 不支持动态数组溢出,需要按
Ctrl + Shift + Enter以数组公式方式输入
3. 性能提示
对于超过 1000 行的数据,TEXTJOIN + SEQUENCE 的性能会略逊于 REPT 函数。如果是超大规模数据处理,建议优先考虑 REPT 方案。
夜雨聆风