如何在vba中使用sumifs作为日期

问题描述 投票:0回答:1

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

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中的相应值也是计数

excel-vba sumifs vba excel
1个回答
2
投票

如果你要使用VBA,那么你可以使用WorksheetFunction.SumIfs,它是"=SumIfs的VBA版本。

所以下面的代码,将WorksheetFunction.SumIfs的值放在Range("O2")的“Main”表中,它将汇总列“Z”上的所有值,其中“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
© www.soinside.com 2019 - 2024. All rights reserved.