2017-04-09 3 views
0

私は以下のコードを持っていますが、動作しません。vbaの日付のsumifsの使用方法

LastRowにワークシート Old_Products列O2の日付が現在の月に、私は列Zに対応する値をしたいされた日である場合、私はまた LastRowsumにワークシートの登録欄Z2内のすべての値をしようと
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 

答えて

2

VBAを使用する場合は、WorksheetFunction.SumIfs(VBAバージョンは"=SumIfs)を使用できます。

だから次のコードは、「メイン」シートにRange("O2")WorksheetFunction.SumIfsの値を入れます、そして、それはコラム「O」の日付がFirstDateとの間にあるコラム「Z」、上のすべての値を合計します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:私の優先バージョン、あなたが日付を比較しようとしていることから、あなたが直接LongとしてFirstDateLastDateを保存することができますし、後でなしがあります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もこの形式に追加できますか? –

+0

@PouryaAshenaは、シート「登録」の「LastRow」は「Old_Products」シートと同じ値ですか? –

+0

はい、それは同じ列ですLastRow = Range( "A100000")End(xlUp).Row –

関連する問題