Sửa trong công thức tại H2 thành =SUMIF(DATA,TRIM($G2),VALUE)Tính tổng con và mẹ.Thanks!BB!
Nếu cột A bạn thêm dấu nháy ở các đầu số, chẳng hạn:Tính tổng con và mẹ.Thanks!BB!
Tính tổng con và mẹ.Thanks!BB!
Sửa trong công thức tại H2 thành =SUMIF(DATA,TRIM($G2),VALUE)
Nếu cột A bạn thêm dấu nháy ở các đầu số, chẳng hạn:
'111
'112
'151
thì có thể bạn sẽ có công thức:
=SUMIF($A$2:$A$7,G2&"*",$B$2:$B$7)
Mượn cái SUMIF của anh Nghĩa bỏ vô cho đúng 2 dòng cuối:
=IF(SUMPRODUCT(($A$2:$A$7=$G2)*($B$2:$B$7))=0,SUMIF($A$2:$A$7,G2&"*",$B$2:$B$7),SUMPRODUCT(($A$2:$A$7=$G2)*($B$2:$B$7)))
Mượn ý tưởng của Hoàng Trọng Nghĩa và giangleloi, E sửa lại như sau:
=SUMIF(DATA,IF(ISNA(MATCH($G2,DATA,0)),$G2&"*",$G2),VALUE)
=SUMIF(DATA,IF(COUNTIF(DATA,$G2),$G2,$G2&"*" ),VALUE)
=SUMIF(DATA,$G2&IF(COUNTIF(DATA,$G2),,"*" ),VALUE)
Nếu công thức của bạn là đúng thì thay ISNA + MATCH thành COUNTIF sẽ ngắn hơn:
hoặc:Mã:=SUMIF(DATA,IF(COUNTIF(DATA,$G2),$G2,$G2&"*" ),VALUE)
Mã:=SUMIF(DATA,$G2&IF(COUNTIF(DATA,$G2),,"*" ),VALUE)
A ndu96081631 coi lại bài #6 giúp E, bị lỗi gì vậy?
Thanks!
Cú pháp của SUMIF là: SUMIF(range, criteria, [sum_range])
Chỗ màu đỏ phải là range (vùng dữ liệu thật) chứ không thể là 1 mảng
Vậy thôi!
(Name DATA1 của bạn là 1 Array, không phải Range)
-------------------
Nói thêm: COUNTIF cũng tương tự vậy, tức không chơi với Array
Thanks!
E sửa lại =SUMPRODUCT(--(DATA1=TRIM($G2)),VALUE)
Cám ơn A nhiều!
Lưu ý rằng: SUMIF luôn cho tốc độ nhanh hơn gấp nhiều lần so với SUMPRODUCT nhé (nhất là với dữ liệu lớn)
Lý do?
và lớn bào nhiêu là gọi là lớn, ndu?
Bạn cứ thí nghiệm tự nhiên biết. Cái này trên diễn đàn đã bàn nhiều lần rồi
Nhưng chưa biết ndu ơi, cần câu trả lời của ndu, nếu không cần chi mà hỏi?
vậy còn gì bàn và hỏi nữa, cứ tìm đi, tìm go o gle còn ngon hơn nhiềuBạn tự tìm trên diễn đàn đi, tôi lười lắm (rảnh đâu mà đi giả lập dữ liệu)
Nhưng chưa biết ndu ơi, cần câu trả lời của ndu, nếu không cần chi mà hỏi?
Option Explicit
Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Sub DoThoiGian() Dim T1@, T2@, Freq@, Overhead@ QueryPerformanceFrequency Freq QueryPerformanceCounter T1 QueryPerformanceCounter T2 Overhead = T2 - T1 QueryPerformanceCounter T1 'Thu tuc cua ban test1 'Thu tuc ban phai lam 'Ket thuc chay thu tuc, nhan thoi gian ket thuc QueryPerformanceCounter T2 'Debug.Print (T2 - T1 - Overhead) / Freq * 1000; "milliseconds(ms)" MsgBox "milliseconds(ms): " & (T2 - T1 - Overhead) / Freq * 1000End Sub
Sub test1()'' test1 Macro'
' Range("B10").Select ActiveCell.FormulaR1C1 = "=SUMIF(R3C1:R7C1,RC[-1],R3C2:R7C2)" Range("B10").Select Selection.AutoFill Destination:=Range("B10:B12"), Type:=xlFillDefault Range("B10:B12").SelectEnd Sub
Sub test2()'' test2 Macro'
' Range("C10").Select ActiveCell.FormulaR1C1 = "=SUMPRODUCT((R3C1:R7C1=RC[-2])*R3C2:R7C2)" Range("C10").Select Selection.AutoFill Destination:=Range("C10:C12") Range("C10:C12").SelectEnd Sub
Anh cú thử đo thời gian xem, em nghĩ sẽ rõ hơn. Em te st thử đoạn này cũng thấy nhanh hơn. Cái này hình như trong phần về Sumproduct của Tác giả Duy Tuân có nói cái này thì phải
Em thấy bác Giola là dân lập trình thì phải mà ThầyGhi macro người ta còn không biết, bạn đưa cả đống hàm API lên, người ta biết mới lạ đó