Cells(i + 7, "Q") = Application.WorksheetFunction.SumProduct(Sheet5.Range("G2:G" & Sheet5.[A65000].End(xlUp)) * (Sheet5.Range("M2:M" & Sheet5.[A65000].End(xlUp)) = Cells(i + 5, i + 16)) * (Sheet5.Range("N2:N" & Sheet5.[A65000].End(xlUp)) = Cells(i + 7, i + 15)))
Cells(i + 7, "q") = WorksheetFunction.SumProduct(Sheet5.Range("G2:G" & Sheet5.[A65000].End(xlUp)) * (Sheet5.Range("N2:N" & Sheet5.[A65000].End(xlUp)) = Cells(i + 7, "p")))
Sai cú pháp thôi ---> End(xlUp).Row chứPHP:Cells(i + 7, "q") = WorksheetFunction.SumProduct(Sheet5.Range("G2:G" & Sheet5.[A65000].End(xlUp)) * (Sheet5.Range("N2:N" & Sheet5.[A65000].End(xlUp)) = Cells(i + 7, "p")))
Em sửa code lại như trên không thấy sai mà vẫn không được nhỉ?
HIc hic
Sai cú pháp thôi ---> End(xlUp).Row chứ
Ngoài ra, dùng SUMPRODUCT trong WorksheetFunction không dễ ăn thế đâu ---> Với SUMPRODUCT có điều kiện thì dùng thế nó cóc ra ---> Phải Evaluate(..._) mới xong!
Vậy:
- Thay vì dùng SUMPRODUCT sao bạn không viết 1 hàm riêng để tính toán ---> Nói không chừng tốc độ còn nhanh hơn
Thầy ơiSai cú pháp thôi ---> End(xlUp).Row chứ
Ngoài ra, dùng SUMPRODUCT trong WorksheetFunction không dễ ăn thế đâu ---> Với SUMPRODUCT có điều kiện thì dùng thế nó cóc ra ---> Phải Evaluate(..._) mới xong!
Vậy:
- Thay vì dùng SUMPRODUCT sao bạn không viết 1 hàm riêng để tính toán ---> Nói không chừng tốc độ còn nhanh hơn
Function Sum_ST(Ngay As Date, method As String)
End Function
with sheet5.[A1].currentregion ' --------------sheet Im 2010 (hang nhap)
.AutoFilter Field:=13, Criteria1:="TM" '----------> ta loc ra phương thức trả ví dụ: TM
.AutoFilter Field:=14,Operator:= _xlFilterValues, Criteria2:=Array(2, "06/01/2010")
End with
Function Sum_ST(Ngay As Date, method As String)
With Sheet5.[A1].CurrentRegion
.AutoFilter Field:=13, Criteria1:="method"
.AutoFilter Field:=14, Criteria2:="ngay"
End With
Amt1 = WorksheetFunction.Sum(Sheet5.Range("G2:G" & Sheet5.[A65000].End(xlUp).Row).SpecialCells(12))
Sum_ST = Amt1
End Function
=SUMPRODUCT(ImEU*(ImMethod=S$6)*(ImDate=$P19))+SUMPRODUCT(ExEU*(ExMethod=S$6)*(ExDate=$P19))
Private Sub CommandButton1_Click()
Application.Calculation = xlCalculationManual
Range("Q9:U38").ClearContents
Me.Calendar1.Visible = False
With Sheet8
If [Q3] > [Q4] Then: MsgBox "Re-check date From...to..": Exit Sub
[P8:P40].ClearContents
[P8] = [Q3]
For i = 1 To [Q4] - [Q3]
Cells(i + 8, "P") = Cells(i + 7, "P") + 1
Next i
End With
Range("Q8:U38").FillDown
Application.Calculation = xlCalculationAutomatic
End Sub
Private Sub Worksheet_Deactivate()
Range("Q9:U38").ClearContents
End Sub
Hàm tự tạo làm gì có cái vụ AutoFilter trong này hả bạn? Phải dùng For... Next thôiSUm_ST = Amt1 + AMt2 (AMt2 tương ứng với sheet Ex 2010)PHP:Function Sum_ST(Ngay As Date, method As String) With Sheet5.[A1].CurrentRegion .AutoFilter Field:=13, Criteria1:="method" .AutoFilter Field:=14, Criteria2:="ngay" End With Amt1 = WorksheetFunction.Sum(Sheet5.Range("G2:G" & Sheet5.[A65000].End(xlUp).Row).SpecialCells(12)) Sum_ST = Amt1 End Function
Nhưng tạm thời em làm Amt1 (cho sheet Im 2010) nhưng kết quả bị sai Thầy NDU ơi
Giúp em với
Function Sum_ST(Src1, Cond1, Src2, Cond2, SrcTotal) As Double
.....
End Function
For i = 1 to UBound(Src1)
If Src(i,1) = Cond1 And Src2(i,1) = Cond2 then
Sum_ST = Sum_ST + SrcTotal(i,1)
End Ì
Next i
Private Sub Worksheet_Activate()
Dim ImBill As Range, ImEU As Range, ImDate As Range, Immethod As Range
Dim ExBill As Range, ExEU As Range, ExDate As Range, Exmethod As Range
With Sheet5.Range("A2:A" & Sheet5.[A65000].End(xlUp).Row)
.Name = "ImBill"
.Offset(, 7).Name = "ImEU"
.Offset(, 12).Name = "ImMethod"
.Offset(, 13).Name = "ImDate"
End With
With Sheet6.Range("A3:A" & Sheet6.[A65000].End(xlUp).Row)
.Name = "ExBill"
.Offset(, 12).Name = "ExEU"
.Offset(, 13).Name = "exMethod"
.Offset(, 14).Name = "ExDate"
End With
End Sub
Private Sub CommandButton1_Click()
Dim i As Long
Application.Calculation = xlCalculationManual
Range("P8:U38").ClearContents
Me.Calendar1.Visible = False
With Sheet8
If Range("Q3") > Range("Q4") Then: MsgBox "Re-check date From...to..": Exit Sub
Range("P8:P40").ClearContents
Range("P8") = Range("Q3")
For i = 1 To WorksheetFunction.Min(Range("Q4") - Range("Q3"))
Cells(i + 8, "P") = Cells(i + 7, "P") + 1
Next i
End With
Range("Q8") = "=SUMPRODUCT(ImEU*(ImMethod=Q$6)*(ImDate=$P8))+SUMPRODUCT(ExEU*(exMethod=Q$6)*(ExDate=$P8))"
Range("Q8").AutoFill Destination:=Range("Q8:U8")
Range("Q8:U38").FillDown
Application.Calculation = xlCalculationAutomatic
End Sub
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2