ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

关于数据提取的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-1-13 15:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 一江春水1688 于 2025-1-13 16:00 编辑
一江春水1688 发表于 2025-1-13 15:51
楼主辛苦,规则明白了
上面的代码三元运算多重嵌套,展开了看会容易些


Snipaste_2025-01-13_15-57-39.png

TA的精华主题

TA的得分主题

发表于 2025-1-13 16:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一江春水1688 发表于 2025-1-13 15:59
上面的代码三元运算多重嵌套,展开了看会容易些

代码中,刻意只涉及到“自制”属性,是为了扩展的目的。比如,还可以增加属性“天下掉下来的”、“水里捞起来的”、“路边捡的”等等。。。代码仍然可以适用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-13 16:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一江春水1688 发表于 2025-1-13 15:51
楼主辛苦,规则明白了

都是大神,我今天一直在研究你们的代码,看不懂就去百度,大神好厉害

TA的精华主题

TA的得分主题

发表于 2025-1-13 16:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一江春水1688 发表于 2025-1-13 15:59
上面的代码三元运算多重嵌套,展开了看会容易些

忘了贴原代码,二段代码是等价的:
  1. function test(){
  2.     let arr = Range("a1").CurrentRegion();
  3.     let res = arr.slice(1).reduce((d, [name, sn, type], i, a) => {
  4.         i == 0 ? type != '自制' ? d.push([name, sn]) : d.push([name, sn, type])
  5.             : type != '自制' ? (name != a[i - 1][0] && d.push([name, sn]))
  6.                 : d.push([name, sn, type]);
  7.         return d;
  8.     }, arr.slice(0,1));
  9.     Range('e1').Resize(res.length, res[0].length).Value2 = res;
  10. }
复制代码

  1. function test1(){
  2.     let arr = Range("a1").CurrentRegion();
  3.     let res = arr.slice(1).reduce((d, [name, sn, type], i, a) => {
  4.         if(i == 0){
  5.             if(type != '自制'){
  6.                 d.push([name, sn]);
  7.             } else {
  8.                 d.push([name, sn, type]);
  9.             }
  10.         } else {
  11.             if(type != '自制'){
  12.                 if(name != a[i - 1][0]) d.push([name, sn]);
  13.             } else {
  14.                 d.push([name, sn, type]);
  15.             }
  16.         }
  17.         return d;
  18.     }, arr.slice(0,1));
  19.     Range('e1').Resize(res.length, res[0].length).Value2 = res;
  20. }
复制代码

TA的精华主题

TA的得分主题

发表于 2025-1-13 17:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 一江春水1688 于 2025-1-13 17:29 编辑

文文一二三 发表于 2025-1-13 16:12
都是大神,我今天一直在研究你们的代码,看不懂就去百度,大神好厉害


再次精简一下:
  1. function test2(){//再次优化,加上注释
  2.     let arr = Range("a1").CurrentRegion();
  3.     let res = arr.slice(1).reduce((d, [name, sn, type], i, a) => {
  4.         if(type == '自制'){//如果属性是自制
  5.             d.push([name, sn, type]);
  6.         } else {//非自制
  7.             if(i == 0){//首行
  8.                 d.push([name, sn]);
  9.             } else if(name != a[i - 1][0]){
  10.                  d.push([name, sn]);//非首行且名称跟上一行不同
  11.             }
  12.         }
  13.         return d;
  14.     }, arr.slice(0,1));
  15.     Range('e1').Resize(res.length, res[0].length).Value2 = res;
  16. }

  17. function test3(){//最后优化
  18.     let arr = Range("a1").CurrentRegion();
  19.     let res = arr.slice(1).reduce((d, [name, sn, type], i, a) => {
  20.         if(type == '自制'){//如果属性是自制
  21.             d.push([name, sn, type]);
  22.         } else if(i == 0 || name != a[i - 1][0]){
  23.             d.push([name, sn]);
  24.         }
  25.         return d;
  26.     }, arr.slice(0,1));
  27.     Range('e1').Resize(res.length, res[0].length).Value2 = res;
  28. }
复制代码

TA的精华主题

TA的得分主题

发表于 2025-1-13 17:08 | 显示全部楼层
本帖最后由 一江春水1688 于 2025-1-13 17:26 编辑

Snipaste_2025-01-13_17-24-58.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-1-13 22:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Again123456 于 2025-1-13 22:11 编辑
一江春水1688 发表于 2025-1-13 15:59
上面的代码三元运算多重嵌套,展开了看会容易些

没看题目,只看了代码

if (type ='xxx'){
}else if( i==0){
}else{
}这样可行不?省得嵌套


哦下面改了,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-1-13 22:48 | 显示全部楼层
Again123456 发表于 2025-1-13 22:07
没看题目,只看了代码

if (type ='xxx'){

嗯,谢谢A佬!这就是菜鸟需要进步的地方,跌跌撞撞的进步。

上次您说的JSA群,我怎么加不了啊?被拒了

TA的精华主题

TA的得分主题

发表于 2025-1-14 08:02 | 显示全部楼层
一江春水1688 发表于 2025-1-13 22:48
嗯,谢谢A佬!这就是菜鸟需要进步的地方,跌跌撞撞的进步。

上次您说的JSA群,我怎么加不了啊?被拒了

可能是群满了,新群号387658145,ans:387658145

TA的精华主题

TA的得分主题

发表于 2025-1-14 12:42 | 显示全部楼层
Again123456 发表于 2025-1-14 08:02
可能是群满了,新群号387658145,ans:387658145

谢谢!我试试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-15 03:22 , Processed in 1.050164 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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