gpt4 book ai didi

function - Excel VBA 日期之间的计数

转载 作者:行者123 更新时间:2023-12-02 19:59:42 27 4
gpt4 key购买 nike

我需要创建一个函数来计算两个日期之间帐号出现的次数。第一个日期基于函数输入,第二个日期提前 3 个月(日期可能不包含在数据集中)。该范围内的日期值的格式为“dd/mm/yyyy h:mm”。由于数据集的大小约为 150,000 行,我希望在代码中执行此操作,而不是在指定单元格内粘贴或评估 COUNTIF 公式。

仅引用 AccountNo 变量时工作表函数有效,但添加条件“">=”或“<= 日期”变量时无效

例如Application.WorksheetFunction.CountIfs(Range("L2:L"& Endrow), AccountNo) > 1 然后 ''''(有效)

该函数需要根据 countif 结果返回一个结果,如下所示。

谢谢

Function LastWrapUp(Date1 As Date, AccountNo)

Dim Date2 As Date
Dim Endrow As Long

Date2 = DateAdd("M", 3, Date1)
Endrow = Range("A" & Rows.Count).End(xlUp).Row

If Application.WorksheetFunction.CountIfs(Range("A2:A17643"), ">=" & Date1, Range("A2:A" & Endrow), "<" & Date2, Range("L2:L" & Endrow), AccountNo) > 1 Then
LastWrapUp = "Not Final Wrap Up"
ElseIf Application.WorksheetFunction.CountIfs(Range("A2:A" & Endrow), ">=" & Date1, Range("A2:A" & Endrow), "<" & Date2, Range("L2:L" & Endrow), AccountNo) = 1 Then
LastWrapUp = "Yes"
Else
LastWrapUp = "Error"
End If

Debug.Print LastWrapUp

End Function

最佳答案

对于那些可能遇到此问题并且感兴趣的人,解决方案是在 Date1 和 Date 2 变量周围添加 Cdbl 和 Cdate 函数(为了清楚起见,按照下面的说明更改为 Newdate 和 AccountDate 变量)。奇迹般有效。在 VBA 中使用日期格式可能很痛苦!

Function LastWrapUp(AccountID, AccountType, AccountDate As Date)

'Find if current WrapUp is the last for a given account number within a 3 month period.
'need to include reference to specific sheets

Dim NewDate As Date
Dim LastRow As Long

NewDate = DateAdd("M", 3, AccountDate)

LastRow = Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("A" & Rows.Count).End(xlUp).Row

If AccountType = "Dummy ID" Then
LastWrapUp = "Dummy ID"
ElseIf Application.WorksheetFunction.CountIfs(Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("A2:A" & LastRow), ">=" & CDbl(CDate(AccountDate)), Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("A2:A" & LastRow), "<" & CDbl(CDate(NewDate)), Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("L2:L" & LastRow), AccountID) > 1 Then
LastWrapUp = "Not Final Wrap Up"
ElseIf Application.WorksheetFunction.CountIfs(Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("A2:A" & LastRow), ">=" & CDbl(CDate(AccountDate)), Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("A2:A" & LastRow), "<" & CDbl(CDate(NewDate)), Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range("L2:L" & LastRow), AccountID) = 1 Then
LastWrapUp = Workbooks("Interim Referrals Report.xlsm").Worksheets("SA Wrap Up Data").Range(AccountID.Address).Offset(0, -4)
Else
LastWrapUp = "Error"
End If

End Function

关于function - Excel VBA 日期之间的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24644714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com