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
としてFirstDate
とLastDate
を保存することができますし、後でなしがあります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もこの形式に追加できますか? –
@PouryaAshenaは、シート「登録」の「LastRow」は「Old_Products」シートと同じ値ですか? –
はい、それは同じ列ですLastRow = Range( "A100000")End(xlUp).Row –