如何在 vba 中对日期使用 sumifs

how to use sumifs for date in vba

我有以下代码,但它不起作用。

Private Sub Worksheet_Activate()

Dim l As Long
Dim LastRow As Long
Dim oWkSht As Worksheet
Dim FirstDate As Date
Dim LastDate As Date
Dim tsales As Long

FirstDate = DateSerial(Year(Date), Month(Date), 1)
LastDate = DateSerial(Year(Date), Month(Date) + 1, 0)
LastRow = Range("A100000").End(xlUp).Row

Sheets(“Main”).Range("O2").Formula = "=SumIfs(Old_Products!Z2:Z & LastRow,Old_Products!O2:O  & LastRow, “ >= ” & FirstDate, Old_Products!O2:O12, “ <= ” & LastDate)+Registration!Z2:Z & LastRow"

End sub

我试图 sum 工作表注册列 Z2 到 LastRow 中的所有值,并且如果工作表 Old_Products 列 O2 到 LastRow 中的日期是一个日期那是在当月,那么我希望 Z 列中的相应值也被计算在内

如果您要使用 VBA,那么您可以使用 WorksheetFunction.SumIfs ,它是 "=SumIfs.

的 VBA 版本

因此下面的代码会将 WorksheetFunction.SumIfs 的值放在 Range("O2") 中的 "Main" sheet 中,并且它会将列 sheet 上的所有值相加=43=],其中 "O" 列中的日期介于 FirstDateLastDate 之间。

代码

Option Explicit

Private Sub Worksheet_Activate()

'Dim l As Long  '<-- not used in this code
Dim LastRow As Long
Dim oWkSht As Worksheet
Dim FirstDate As Date
Dim LastDate As Date
'Dim tsales As Long  '<-- not used in this code

Set oWkSht = Worksheets("Old_Products")

FirstDate = DateSerial(Year(Date), Month(Date), 1)
LastDate = DateSerial(Year(Date), Month(Date) + 1, 0)

LastRow = oWkSht.Range("A100000").End(xlUp).Row

Sheets("Main").Range("O2").Value = Application.WorksheetFunction.SumIfs(oWkSht.Range("Z2:Z" & LastRow), oWkSht.Range("O2:O" & LastRow), ">=" & CLng(FirstDate), oWkSht.Range("O2:O" & LastRow), "<=" & CLng(LastDate))

End Sub

编辑 1:我的首选版本,因为您要比较日期,您可以直接将 FirstDateLastDate 存储为 Long,以后就不用CLng.

此外,添加了使用 EoMonth 函数查找该月最后一天的选项。

代码

Option Explicit

Private Sub Worksheet_Activate()

' Dim l As Long  '<-- not used in this code
Dim LastRow As Long
Dim oWkSht As Worksheet
Dim FirstDate As Long
Dim LastDate As Long
' Dim tsales As Long  '<-- not used in this code

FirstDate = DateSerial(Year(Date), Month(Date), 1)
LastDate = WorksheetFunction.EoMonth(Date, 0)

Set oWkSht = Worksheets("Old_Products")
With oWkSht
    LastRow = .Range("A100000").End(xlUp).Row
    Sheets("Main").Range("O2").Value = Application.WorksheetFunction.SumIfs(.Range("Z2:Z" & LastRow), .Range("O2:O" & LastRow), ">=" & FirstDate, .Range("O2:O" & LastRow), "<=" & LastDate)
End With

End Sub