2017-04-09 90 views
0

我有以下代碼,但它不起作用。如何在vba中使用日期的sumifs

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中的對應值的日期也算數

回答

2

如果您要使用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:我的首選版本,因爲你正在尋找比較日期,您可以直接存儲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 
+0

輝煌。謝謝。只是最後一個問題。我怎樣才能添加+註冊!Z2:Z&LastRow到這個formule? –

+0

@PouryaAshena表單「Registration」中的「LastRow」是否與「Old_Products」表單中的值相同? –

+0

是的,它是同一列以及LastRow =範圍(「A100000」)。結束(xlUp)。行 –