romelsms1
07-08-2014, 07:51 AM
hello
on topic: I have the same issue with counting dates...so I use countifs for multiple conditions (including date) and I don't understand why it count only to the 600 line in excel :(
Cnt11_ian = Application.WorksheetFunction.CountIfs _
(Sheets(1).Range("H7:H600" & LastRow1), ">=1/1/2014", Sheets(1).Range("H7:H600" & LastRow1), "<2/1/2014", _
Sheets(1).Range("D7:D600" & LastRow1), Sheets(1).Cells(i, "D"), _
Sheets(1).Range("A7:A600" & LastRow1), Sheets(1).Cells(i, "A")) '
if I count without takeing in account the date it can go to the last row in sheet
Cnt11_ian = Application.WorksheetFunction.CountIfs _
(Sheets(1).Range("D7:D" & LastRow1), Sheets(1).Cells(i, "D"), _
Sheets(1).Range("A7:A" & LastRow1), Sheets(1).Cells(i, "A")) '
anu ideea?
mancubus
07-08-2014, 08:11 AM
if LastRow1 is null then Range("H7:H600" & LastRow1) = Range("H7:H600")
if LastRow1 is 5 then Range("H7:H600" & LastRow1) = Range("H7:H6005")
after assigning a value to variable LastRow1 (such as LastRow1 = Cells(Rows.Count, 1).End(xlup).Row)
Range("H7:H" & LastRow1)
romelsms1
07-08-2014, 09:34 AM
i don't understand :( why to put an if condition
bellow is my code
Sub Button1_Click()
Dim LastRow1 As Integer
Dim LastRow2_ian As Integer '
Dim i As Integer
Dim Cnt11_ian As Double
Dim Cnt21_ian As Double
Sheets(2).Range("C4:AL33") = Null
LastRow1 = Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row
For i = 1 To LastRow1
LastRow2_ian = Sheets(2).Cells(Rows.Count, "C").End(xlUp).Row
Cnt21_ian = Application.WorksheetFunction.CountIfs _
(Sheets(2).Range("C1:C" & LastRow2_ian), Sheets(1).Cells(i, "D"), _
Sheets(2).Range("D1:D" & LastRow2_ian), Sheets(1).Cells(i, "A"))
Cnt11_ian = Application.WorksheetFunction.CountIfs _
(Sheets(1).Range("H7:H600" & LastRow1), ">=1/1/2014", Sheets(1).Range("H7:H600" & LastRow1), "<2/1/2014", _
Sheets(1).Range("D7:D600" & LastRow1), Sheets(1).Cells(i, "D"), _
Sheets(1).Range("A7:A600" & LastRow1), Sheets(1).Cells(i, "A"))
If Cnt11_ian >= 1 And Cnt21_ian = 0 Then
If Sheets(2).Cells(LastRow2_ian, "C") = "" Then 'cauta prima linie
Sheets(2).Cells(LastRow2_ian + 4, "C") = Sheets(1).Cells(i, "D")
Sheets(2).Cells(LastRow2_ian + 4, "D") = Sheets(1).Cells(i, "A")
Sheets(2).Cells(LastRow2_ian + 4, "E") = Cnt11_ian
Else
Sheets(2).Cells(LastRow2_ian + 1, "C") = Sheets(1).Cells(i, "D")
Sheets(2).Cells(LastRow2_ian + 1, "D") = Sheets(1).Cells(i, "A")
Sheets(2).Cells(LastRow2_ian + 1, "E") = Cnt11_ian
End If
End If
Next
Sheets(2).Range("C29:E29") = Application.WorksheetFunction.SumIf(Sheets(2).Range("D4:D28"), "WP1", Sheets(2).Range("E4:E28"))
Sheets(2).Range("C30:E30") = Application.WorksheetFunction.SumIf(Sheets(2).Range("D4:D28"), "WP2", Sheets(2).Range("E4:E28"))
Sheets(2).Range("C31:E31") = Application.WorksheetFunction.SumIf(Sheets(2).Range("D4:D28"), "WP3", Sheets(2).Range("E4:E28"))
Sheets(2).Range("C32:E32") = Application.WorksheetFunction.SumIf(Sheets(2).Range("D4:D28"), "WP4", Sheets(2).Range("E4:E28"))
Sheets(2).Range("C33:E33") = Application.WorksheetFunction.SumIf(Sheets(2).Range("D4:D28"), "WP5", Sheets(2).Range("E4:E28"))
end sub
mancubus
07-08-2014, 11:43 AM
apparently, the first two lines in my post are just an explanation of building a range with a variable and are not a part of a macro.
you should use the line Range("H7:H" & LastRow1) to correct the ranges in your code.
if you are willing to go any further, start your own thread or ask a moderator to split this thread into two and post your workbook.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.