ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liujunwei4321

[分享] 根据指定字符把单个单元格拆分到多行(公式,辅助列)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-2-24 09:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. =REDUCE(A1:C1,C2:C8,LAMBDA(x,y,VSTACK(x,IF({1,1,0},OFFSET(y,,-2,,2),TEXTSPLIT(y,,";")))))
复制代码
image.png

TA的精华主题

TA的得分主题

发表于 2025-2-24 21:29 | 显示全部楼层
学习了学习

TA的精华主题

TA的得分主题

发表于 2025-2-25 08:39 | 显示全部楼层
  1. =LET(一,TEXTSPLIT(TEXTJOIN(";",,C2:C8),,";"),HSTACK(INDEX(A2:B8,XLOOKUP(一&";",C2:C8&";",SEQUENCE(7),,3),{1,2}),一))
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-1 09:04 来自手机 | 显示全部楼层
夜雨无声1949 发表于 2025-2-25 08:39

这个解法有问题吧?xlookup第5个参数的匹配模式有3?我查到的只有0,-1,1,2。而且用xlookup当C列有相同值的时候,匹配到的A和B列行号会出错吧?

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-1 09:34 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 liujunwei4321 于 2025-4-1 16:29 编辑

1000007541.jpg
1000007542.jpg

同时拆分到行和列,顺便避免使用offset,因为如果对中间变量过程拆分,而源数据不是在单元格中offset出错。

=IFNA(REDUCE(A1:C1,SEQUENCE(3),LAMBDA(x,y,VSTACK(x,IF(SEQUENCE(,7)<3,INDEX(A2:B4,y,),HSTACK(REPTARRAY(1,,2),TEXTSPLIT(INDEX(C2:C4,y),",",";")))))),"")

上面的第一个sequence中的3是因为不算表头有3行数据

第二个sequence中的7是假设按列拆分后不大于7列,它后面的<3是因为待拆分列是在第3列,前面还有A和B列

reptarray是为了扩充拆分后的区域,A和B列已经有两列了,扩充两列点位



公式2(更健壮):

=LET(rng,A1:C5,REDUCE(INDEX(rng,1,),SEQUENCE(ROWS(rng)-1),LAMBDA(x,y,VSTACK(x,LET(s,TEXTSPLIT(INDEX(rng,y+1,COLUMNS(rng)),",",";"),HSTACK(IF(SEQUENCE(ROWS(s)),INDEX(rng,y+1,SEQUENCE(1,COLUMNS(rng)-1))),s))))))

TA的精华主题

TA的得分主题

发表于 2025-4-1 09:48 | 显示全部楼层
=REDUCE({"课程类别","考核方式","上课地点"},C2:C8,LAMBDA(x,y,VSTACK(x,LET(a,TEXTSPLIT(y,,";"),r,SEQUENCE(ROWS(a)),HSTACK(IF(r,OFFSET(y,,-1,,2)),a)))))

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-2 10:02 来自手机 | 显示全部楼层
liujunwei4321 发表于 2025-4-1 09:34
同时拆分到行和列,顺便避免使用offset,因为如果对中间变量过程拆分,而源数据不是在单元格中offset ...

如果待拆分列有空单元格会出错。

TA的精华主题

TA的得分主题

发表于 2025-4-2 12:43 来自手机 | 显示全部楼层
=REDUCE(A1:D1,C2:C27,LAMBDA(x,y,VSTACK(x,CHOOSE({1,2,3,4},OFFSET(y,,-2),OFFSET(y,,-1),TOCOL(REPTARRAY(TEXTSPLIT(y,,";"),,ROWS(TEXTSPLIT(OFFSET(y,,1),,";")))),REPTARRAY(TEXTSPLIT(OFFSET(y,,1),,";"),ROWS(TEXTSPLIT(y,,";")))))))

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-2 16:56 | 显示全部楼层
mengrs 发表于 2025-4-2 12:43
=REDUCE(A1:D1,C2:C27,LAMBDA(x,y,VSTACK(x,CHOOSE({1,2,3,4},OFFSET(y,,-2),OFFSET(y,,-1),TOCOL(REPTARRA ...

用到了辅助列,好像不用辅助列也可以

TA的精华主题

TA的得分主题

发表于 2025-4-2 17:09 来自手机 | 显示全部楼层
liujunwei4321 发表于 2025-4-2 16:56
用到了辅助列,好像不用辅助列也可以

可以不用辅助列
=REDUCE(A1:D1,C2:C27,LAMBDA(x,y,LET(a,TEXTSPLIT(y,,";"),b,TEXTSPLIT(OFFSET(y,,1),,";"),VSTACK(x,CHOOSE({1,2,3,4},OFFSET(y,,-2),OFFSET(y,,-1),TOCOL(REPTARRAY(a,,ROWS(b))),REPTARRAY(b,ROWS(a)))))))
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-15 03:23 , Processed in 1.046554 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表