如果您要使用VBA,那麼您可以使用WorksheetFunction.SumIfs
,這是VBA版本到"=SumIfs
。
所以下面的代碼,就會把WorksheetFunction.SumIfs
的值Range("O2")
在「主」片材,這將總結於列「Z」,其中在列「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
輝煌。謝謝。只是最後一個問題。我怎樣才能添加+註冊!Z2:Z&LastRow到這個formule? –
@PouryaAshena表單「Registration」中的「LastRow」是否與「Old_Products」表單中的值相同? –
是的,它是同一列以及LastRow =範圍(「A100000」)。結束(xlUp)。行 –