ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 筛选个数据还出错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-14 11:24 | 显示全部楼层
let arr=Sheets('原数据').Range('a1').CurrentRegion.Value2.slice(1).filter(v=>v[0]>=sdate && v[0]<=edate)
这样写就能筛选出结果 日期虽然是数字 写入单元格设置一下单元格格式为日期就是和源数据一样的(格式刷刷一下)

TA的精华主题

TA的得分主题

发表于 2024-12-14 11:31 | 显示全部楼层
function 筛选汇总(){
        let [sdate,edate]=[Sheets('汇总').Range('b1').Value2,Sheets('汇总').Range('d1').Value2]
        let arr=Sheets('原数据').Range('a1').CurrentRegion.Value2.slice(1).filter(v=>v[0]>=sdate && v[0]<=edate)
        Range("g2").Resize(arr.length,5).Value2 = arr
}
就这样 写入g2后 你给g列设置下单元格格式为日期

TA的精华主题

TA的得分主题

发表于 2024-12-14 11:50 | 显示全部楼层

new Date 出来的是以毫秒为单位的时间戳值 而表格的时间值是以天为单位的带小数点的数字 jsa的月是从0开始的

TA的精华主题

TA的得分主题

发表于 2024-12-14 11:53 | 显示全部楼层
与vba中的时间慨念不同 vba是表格原生的补充程序 与表格是一致的 他不需要差值计算的 在jsa中 js时间与表格的oA时间不是一回事

TA的精华主题

TA的得分主题

发表于 2024-12-14 11:53 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-14 15:10 | 显示全部楼层
可以了
  1. function 筛选汇总(){
  2.         let [sdate,edate]=[Sheets('汇总').Range('b1').Value(),Sheets('汇总').Range('d1').Value()]
  3.         let arr=Sheets('原数据').Range('a1').CurrentRegion().slice(1).filter(v=>v[0]>=sdate && v[0]<=edate)
  4.         let hj=['合计',0,null,0];
  5.         arr=arr.reduce((p,[sj,pm,sl,dj,zj])=>(
  6.                 //sj=WorksheetFunction.Text(sj,'yyyy-mm=dd'),//如果需要日期列把日期格式设置一下
  7.                 p[pm]??=p.push([pm,0,0,0])-1,
  8.                 p[p[pm]][1]+=sl,
  9.                 p[p[pm]][2]=dj,
  10.                 p[p[pm]][3]+=zj,
  11.                 hj[1]+=sl,
  12.                 hj[3]+=zj,
  13.                 p),[['品名','总数量','单价','总金额']]);
  14.                 arr.push(hj);
  15.                 let rng=Sheets('汇总').Range('a2').Resize(arr.length,arr[0].length);
  16.                 rng.Value2=arr;
  17.                 rng.Columns.AutoFit();
  18.                 rng.Borders.LineStyle=1;
  19.                 rng.HorizontalAlignment=xlCenter;
  20.                 alert('汇总完毕!')
  21. }
复制代码

TA的精华主题

TA的得分主题

发表于 2024-12-14 15:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先贴图,稍后贴上代码

Snipaste_2024-12-14_15-15-31.png

TA的精华主题

TA的得分主题

发表于 2024-12-14 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
改成这样,就会自动转换格式了,不用刻意再转换成日期格式,代码如下:

  1. function 筛选汇总__(){
  2.     let [,sdate,,edate] = Sheets('汇总').Range('a1').CurrentRegion().flat();
  3.     arr = Sheets('原数据').Range('a1').CurrentRegion().slice(1).filter(([v]) => v >= sdate && v <= edate)
  4.     arr.forEach((x) => console.log(JSON.stringify(x)))
  5. }
复制代码


TA的精华主题

TA的得分主题

发表于 2024-12-14 15:25 | 显示全部楼层
还可以写成这样,知识点参见【解构赋值】:

  1. function 筛选汇总_(){
  2.         let {1:sdate,3:edate} = Sheets('汇总').Range('a1').CurrentRegion().flat();
  3.         arr = Sheets('原数据').Range('a1').CurrentRegion().slice(1).filter(([v]) => v >= sdate && v <= edate)
  4.         arr.forEach((x) => console.log(JSON.stringify(x)))
  5. }
复制代码


TA的精华主题

TA的得分主题

发表于 2024-12-14 15:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
贴代码要审核,贴图吧,两种写法:
Snipaste_2024-12-14_15-27-44.png

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-25 03:07 , Processed in 0.034050 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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