Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在30天内找到交易记录_Excel_Vba_Window_Period - Fatal编程技术网

Excel 在30天内找到交易记录

Excel 在30天内找到交易记录,excel,vba,window,period,Excel,Vba,Window,Period,我有一个列在下面的事务列表。有上千行事务。我需要找到在30天内至少有12个或更多相同帐户名且总金额超过10000美元的交易。请帮忙。我甚至不知道如何开始。这周我刚开始研究VBA。这将在Excel中使用宏 交易ID;数量日期帐户名 希望这是有意义的。 我正在寻找12个或更多的交易与相同的帐户名,有超过10000美元的总金额在30天内 非常感谢你 由于Recordset.Filter属性的灵活性,我建议使用ADO记录集。我最多只能使用它遍历源表的每一行一次。 逻辑如下: 将源数据获取到记录集中。 筛

我有一个列在下面的事务列表。有上千行事务。我需要找到在30天内至少有12个或更多相同帐户名且总金额超过10000美元的交易。请帮忙。我甚至不知道如何开始。这周我刚开始研究VBA。这将在Excel中使用宏

交易ID;数量日期帐户名

希望这是有意义的。 我正在寻找12个或更多的交易与相同的帐户名,有超过10000美元的总金额在30天内

非常感谢你

由于Recordset.Filter属性的灵活性,我建议使用ADO记录集。我最多只能使用它遍历源表的每一行一次。 逻辑如下:

将源数据获取到记录集中。 筛选记录集以仅包括具有相同“AccountName”的记录。 如果有超过12条记录,即交易记录,这是您在筛选集的要求之一,则继续。否则,请更新筛选器以排除此“AccountName”,并获取下一个。 创建一个数组,在事务的第一天和最后一天之间每天使用一个元素,并在其中存储当天事务的总和。 保留前30天总计的运行总和。如果总额超过10000美元,请存储“AccountName”、30天窗口的开始日期和交易总额。 重置记录集筛选器以排除以前处理的帐户并处理下一个帐户 “帐户名”。 处理完所有“AccountName”后,创建一个新工作表并将结果复制到其中。 代码读取至少包含三列数据的电子表格:“金额”、“日期”和“帐户名”。见下文:

选项显式 子聚合WithinWindows Dim xlXML作为对象的MSXML2.DOMDocument 将rs设置为对象“ADODB.Recordset” 将ws设置为工作表 变暗rng As范围 将结果设置为集合 将dblRunSum设置为双精度 暗淡的二次谐波 Dim-ar2作为变异体 Dim sFltr作为字符串,sAcctName作为字符串 模糊的lDateLow一样长,lDateHigh一样长,LwnLow一样长,我一样长,j一样长 '使用kulshresthazone在http://usefulgyaan.wordpress.com/ 设置rng=Application.ActiveSheet.UsedRange Set rs=CreateObjectADODB.Recordset 设置xlXML=CreateObjectMSXML2.DOMDocument xlXML.LoadXML rng.ValuexlRangeValueMSPersistXML rs.openxlxml 设置rng=无 Set xlXML=Nothing Set colResults=新集合 rs.排序=[日期]ASC sAcctName=rs.FieldsAccountName.Value rs.Filter=[AccountName]='&sAcctName&' 做而不做 如果rs.RecordCount>=12,则 莫夫拉斯特 lDateHigh=CLngrs.FieldsDate.Value 先走一步 lDateLow=CLngrs.FieldsDate.Value ReDim aDaySumslDateHigh-lDateLow dblRunSum=0 lWndLow=0 sAcctName=rs.FieldsAccountName.Value 做而不做 i=CLngrs.FieldsDate.Value-lDateLow 做而不做 如果CLngrs.FieldsDate-lDateLow=i,则 aDaySumsi=aDaySumsi+rs.FieldsAmount.Value 下一个 其他的 退出Do 如果结束 环 如果我-lWndLow 10000那么 ar0=sAcctName ar1=CDatelWndLow+ldatelLow ar2=dblRunSum colResults.addar 如果结束 dblRunSum=dblRunSum+aDaySumsi 对于j=lWndLow至i-31 dblRunSum=dblRunSum-aDaySumsj 下一个j lWndLow=i-30 如果结束 环 如果结束 如果sFltr=则 sFltr=[AccountName]'&sAcctName&' 其他的 sFltr=sFltr&and[AccountName]'&sAcctName&' 如果结束 rs.过滤器=sFltr 如果不是rs.EOF,则rs.Filter=sFltr&和[AccountName]='&rs.FieldsAccountName.Value&' 环 rs.Close 设置rs=无 设置ws=Application.ActiveWorkbook.Sheets.Add ws.Name=Results ws.Cells1,1.Value=AccountName ws.Cells1,2.Value=WindowsStartDate ws.Cells1,3.Value=WindowAggregate 对于i=1到colResults.Count ws.Rangews.Cellsi+1,1,ws.Cellsi+1,3=colResults.Itemi 接下来我 设置ws=Nothing 端接头