ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 期待老师解决最后的问题 ![感谢红旗雪]交易时间里面重复多次的日期,去重汇总天数!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-6-21 21:13 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 mrsjun 于 2017-6-23 08:43 编辑

有一个交易记录表格,相同的 交易品种 有 多条交易记录,每一条都有 买入日期 和 卖出日期,如果以 交易品种 为主关键字,进行日期汇总,去掉重复日期,看看一共持有了多少天,同时利用公式计算出整个交易周期持有仓位的天数,怎么办?大神们,请帮忙看看!

部分解决,还有其它问题
,解决公式在8楼,现移到下方,谢谢【红旗雪】
  1. =COUNT(0/MMULT(TRANSPOSE((B$2:B$46<>"")*1),(TRANSPOSE(ROW($42736:$46752))>=E$2:E$46)*(TRANSPOSE(ROW($42736:$46752))<=F$2:F$46)*(MOD(TRANSPOSE(ROW($42736:$46752)),7)>1)*(B$2:B$46=B2)))
复制代码


2017-6-22  22:00

还有一个问题求教?交易日期内有节日需要排除的,会指定如下图,例:(为了配合NETWORKDAYS.INTL函数才这样指定的)
指定节日2017-5-292017-5-302017-10-12017-10-22017-10-32017-10-4......2017-10-8



应该如何从数组中把它排除呢?

*附小提示:我把结束日期定义到2027-12-31,数组多了3000维,感觉整个表的速度都将下来啦。所以就把ROW配合indirect把结束日期范围动态指定为今天加1天,速度就快多了,MMULT的乘积运算太浪费内存,数组多了机器跑不动。




2017-6-23 2:42
我试着把指定需要排除的节日日期改为以列的形式存放,并且和记录条数一样多,都是从2行到46行。如下图:4.png

然后在公式增加一个<>“不等于”的条件,只能排除列首第一行的日期,这是为什么呢?



增加部分为:
=COUNT(0/MMULT(TRANSPOSE((B$2:B$46<>"")*1),(TRANSPOSE(ROW(42826:42909))<>J$2:J$46)*(TRANSPOSE(ROW(42826:42909))>=E$2:E$46)*(TRANSPOSE(ROW(42826:42909))<=F$2:F$46)*(MOD(TRANSPOSE(ROW(42826:42909)),7)>1)*(B$2:B$46=B2)))


不知道什么原因,不能正常排除全部节日日期。请教高手?


问题1-日期去重汇总

问题1-日期去重汇总

问题2-排除指定日期

问题2-排除指定日期

指定日期改为一列,和记录数量对应。

指定日期改为一列,和记录数量对应。

工作簿1.zip

10.05 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2017-6-22 09:34 | 显示全部楼层
mrsjun 发表于 2017-6-21 23:14
我有一点思路,就是用ROW、indirect函数,利用行号生成日期数组数据,再进行比较,但我不能做到让这个数组 ...
  1. =COUNT(0/MMULT(COLUMN(A:AS)^0,(TRANSPOSE(ROW($42736:$43101))>=E$2:E$46)*(TRANSPOSE(ROW($42736:$43101))<=F$2:F$46)*(MOD(TRANSPOSE(ROW($42736:$43101)),7)>1)*(B$2:B$46=B2)))
复制代码
数组
说明:
       1、用2017年1月1日(即42736)至2018年1月1日(即43101)间的日期与“买入时间”(即E列)、“卖出时间”(即F列)比较大小,同时满足的为1,否则为0
       2、MOD部分是排除一年日期中的周六、周日。
       3、MMULT是对每一天符合条件的进行累计;用“0/MMULT”是去除不符合条件的0值,COUNT只统计数字个数,而不论某一日期在交易日期中重复了几次。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-21 22:34 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-23 08:33 编辑

移至顶楼

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-21 23:14 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-21 23:24 编辑

我有一点思路,就是用ROW、indirect函数,利用行号生成日期数组数据,再进行比较,但我不能做到让这个数组包含所有满足条件的日期范围。
如:参考上图数据,公式row(indirect(E2&":"&F2)),就可以生成
2017-3-5     2017-3-6    2017-3-7     .......    2017-3-28  ,这样一个一维数组,可以用下一条满足条件的数据也组成时间范围数组,然后和这一数组比较,但这一个数组并不是全部时间范围,只是第2行的时间范围,如何能把所有满足条件记录(如:代码600001)的时间范围变成一个数组, “并集” 后再来进行比较呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 09:10 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-22 09:11 编辑

[分享]胡剑也谈数组串接问题-进化到胡剑揉捏数组
有点模糊的头绪,不知道是不是跑偏了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 09:57 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-22 10:09 编辑
红旗雪 发表于 2017-6-22 09:34
数组
说明:
       1、用2017年1月1日(即42736)至2018年1月1日(即43101)间的日期与“买入时间”( ...

牛B,非常详尽,我先消化一下。
这是一个很好的思路,先设置一个大的日期范围,用它来和出现过的日期范围比较。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 10:16 | 显示全部楼层
厉害,果然是我想要的目的。逻辑非常清晰,高效的数组。困扰了好几天的问题一下就解开了,非常满足。:)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 10:16 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-22 11:28 编辑
红旗雪 发表于 2017-6-22 09:34
数组
说明:
       1、用2017年1月1日(即42736)至2018年1月1日(即43101)间的日期与“买入时间”( ...

这个表的数据是动态的,里面的记录会不断增加,我把MMULT的二维数组的第一维
  1. =COUNT(0/MMULT(COLUMN(A:AS)^0,(TRANSPOSE(ROW($42736:$46752))>=E$2:E$46)*(TRANSPOSE(ROW($42736:$46752))<=F$2:F$46)*(MOD(TRANSPOSE(ROW($42736:$46752)),7)>1)*(B$2:B$46=B2)))
复制代码
COLUMN(A:AS)^0

改写为
  1. =COUNT(0/MMULT(TRANSPOSE((B$2:B$46<>"")*1),(TRANSPOSE(ROW($42736:$46752))>=E$2:E$46)*(TRANSPOSE(ROW($42736:$46752))<=F$2:F$46)*(MOD(TRANSPOSE(ROW($42736:$46752)),7)>1)*(B$2:B$46=B2)))
复制代码
TRANSPOSE((B$2:B$46<>"")*1)

就好了。非常感谢!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 11:51 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-23 08:33 编辑

移到顶楼

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 12:51 | 显示全部楼层
本帖最后由 mrsjun 于 2017-6-23 08:34 编辑

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

本版积分规则

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

GMT+8, 2024-12-29 02:50 , Processed in 0.045018 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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