如何在 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" 列中的日期介于 FirstDate
和 LastDate
之间。
代码
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:我的首选版本,因为您要比较日期,您可以直接将 FirstDate
和 LastDate
存储为 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
我有以下代码,但它不起作用。
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
.
因此下面的代码会将 WorksheetFunction.SumIfs
的值放在 Range("O2")
中的 "Main" sheet 中,并且它会将列 sheet 上的所有值相加=43=],其中 "O" 列中的日期介于 FirstDate
和 LastDate
之间。
代码
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:我的首选版本,因为您要比较日期,您可以直接将 FirstDate
和 LastDate
存储为 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