thanhtaiteo
Thành viên mới

- Tham gia
- 25/1/13
- Bài viết
- 35
- Được thích
- 1
Liệu đây có phải hàm bạn tìm kiếm:Hiện em gặp 1 ca khó nhờ các anh chị cao thủ xem giúp em với .
Có đính kèm file .
View attachment 192990
D5=IFERROR(LOOKUP(2,1/(IF(C5="",B5,C5)=I$5:I$28),K$5:K$28),"")
bạn xem công thức trong file nhé!
Vậy thử cách sau:Cám ơn bác dazkangel và bác hoangminhtien ! nhưng em không hiểu tại sao trong công thức lại ko đề cập đến cột j
Vì cột j ( Last edit ) nó quyết định giá trị đó có phải là mới nhất hay không ?
Và khi em thay đổi thời gian cột J của case 122231943 về thời gian mới hơn thì, đáng lý ra kết quả phải trả vè là 21 nhưng công thức ko nhận ra dc, vẫn giữ nguyên là 26
Mong nhận được sự hỗ trợ thêm ạ .
View attachment 192994
=IFERROR(LOOKUP(2,1/(IF(C5="",B5,C5)&AGGREGATE(14,6,(IF(C5="",B5,C5)=I$5:I$28)*J$5:J$28,1)=I$5:I$28&J$5:J$28),K$5:K$28),"")
Vậy thử cách sau:
PHP:=IFERROR(LOOKUP(2,1/(IF(C5="",B5,C5)&AGGREGATE(14,6,(IF(C5="",B5,C5)=I$5:I$28)*J$5:J$28,1)=I$5:I$28&J$5:J$28),K$5:K$28),"")
Chạy thử hàm sau, nhớ kết thúc bằng Ctrl+Shift+Enter:Thành công rồi bác dazkangel, nhưng em hơi đau đầu vì hiện tại em áp dụng thực tế thì file rất nặng hầu như công thức không chạy được .
Tìm kiếm kết quả của khoản 20.000 dòng với vùng dữ liệu là 200.000 dòng . Nó đứng mấy bác ạ .
Nếu bác có thể cho em xin cái code VBA để chạy đỡ nhọc nhằng hơn được ko ạ
=INDIRECT("K"&4+MATCH(MAX((IF(C5="",B5,C5)=I$5:I$28)*J$5:J$28),(IF(C5="",B5,C5)=I$5:I$28)*J$5:J$28,0))
Chạy thử hàm sau, nhớ kết thúc bằng Ctrl+Shift+Enter:
Bạn cho mượn file 200.000 dòng thử xem.PHP:=INDIRECT("K"&4+MATCH(MAX((IF(C5="",B5,C5)=I$5:I$28)*J$5:J$28),(IF(C5="",B5,C5)=I$5:I$28)*J$5:J$28,0))
Về VBA thua bác ạ hỏi anh HieuCD xem...
Mình có tạo ra 4 cột phụ, tuy nhìn rườm rà nhưng sẽ nhẹ hơn nhiều bạn thử làm theo xem.Bác có facebook và email không ? một số thông tin hơi nhạy cảm minh ko thể share trên đây được .
Khi 1 công thức mảng hoạt động nó phải chạy 1 mảng rất lớn, bạn càng lặp lại công thức nhiều lần thì nó càng rất nặng.Em thề là nghiên cứu nữa ngày ! mà em ko biết bác tạo thêm cột M N O Q để làm gì ạ ??
View attachment 193120
Góp vui với 1 cột phụ loại bỏ các ID có trướcEm thề là nghiên cứu nữa ngày ! mà em ko biết bác tạo thêm cột M N O Q để làm gì ạ ??
View attachment 193120
xem mãi mới hiểu giờ mới ngộ ra kém quá híc hícGóp vui với 1 cột phụ loại bỏ các ID có trước
Bạn dùng cột phụ và bảng phụ chưa nhiều nên chưa quen thôi, sau nầy bạn sẽ giỏi hơn mình.xem mãi mới hiểu giờ mới ngộ ra kém quá híc híc
Bạn chạy thử Sub này cho dữ liệu thật của bạn xem sao,Tìm kiếm kết quả của khoản 20.000 dòng với vùng dữ liệu là 200.000 dòng . Nó đứng mấy bác ạ .
Nếu bác có thể cho em xin cái code VBA để chạy đỡ nhọc nhằng hơn được ko ạ
Public Sub GPE()
Dim Dic As Object, sArr(), tArr(), dArr(), Tem As String
Dim I As Long, J As Long, K As Long, R As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range("i5", Range("i5").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim tArr(1 To R, 1 To 3)
For I = 1 To R
Tem = sArr(I, 1)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Item(Tem) = K
For J = 1 To 3
tArr(K, J) = sArr(I, J)
Next J
Else
Rws = Dic.Item(Tem)
If sArr(I, 2) > tArr(Rws, 2) Then
tArr(Rws, 2) = sArr(I, 2)
tArr(Rws, 3) = sArr(I, 3)
End If
End If
Next I
'-------------------------------------------'
sArr = Range("b5", Range("b5").End(xlDown)).Resize(, 2).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
Tem = IIf(sArr(I, 2) <> Empty, sArr(I, 2), sArr(I, 1))
If Dic.Exists(Tem) Then dArr(I, 1) = tArr(Dic.Item(Tem), 3)
Next I
'Range("m5").Resize(K, 3) = tArr '
Range("d5").Resize(R) = dArr
Set Dic = Nothing
End Sub
hi hi biết bao giờ, em thì lười tìm hiểu rồi ^^Bạn dùng cột phụ và bảng phụ chưa nhiều nên chưa quen thôi, sau nầy bạn sẽ giỏi hơn mình.![]()
Thử codeHiện em gặp 1 ca khó nhờ các anh chị cao thủ xem giúp em với .
Có đính kèm file .
View attachment 192990
Sub Result()
Dim dArr As Variant, sArr As Variant, Arr As Variant
Dim i As Long, key
With Sheets("Sheet1")
dArr = .Range("I5:K" & .Range("I" & Rows.Count).End(xlUp).Row).Value
sArr = .Range("B5:C" & .Range("B" & Rows.Count).End(xlUp).Row).Value
End With
ReDim Arr(1 To UBound(sArr), 1 To 1)
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(dArr)
key = dArr(i, 1)
If Not .exists(key) Then .Add key, i Else If dArr(i, 2) > dArr(.Item(key), 2) Then .Item(key) = i
Next i
For i = 1 To UBound(sArr)
If sArr(i, 2) = Empty Then sArr(i, 2) = sArr(i, 1)
Arr(i, 1) = dArr(.Item(sArr(i, 2)), 3)
Next i
End With
Sheets("Sheet1").Range("D5").Resize(UBound(Arr)) = Arr
End Sub
Anh giải thích sao phải cộng 0,0000001 được không anh ô kết quả số 7 sao bị lỗi nhỉ?Góp vui với 1 cột phụ loại bỏ các ID có trước
=IF(SUMPRODUCT((I$5:I$28=I5)*(J$5:J$28>J5)),"",I5)
Mình không dùng hàm Sumproduct vì nó khá nặng khi dữ liệu nhiềuAnh giải thích sao phải cộng 0,0000001 được không anh ô kết quả số 7 sao bị lỗi nhỉ?
Em làm theo anh nhưng công thức khác thì nó chịu:
PHP:=IF(SUMPRODUCT((I$5:I$28=I5)*(J$5:J$28>J5)),"",I5)
http://www.giaiphapexcel.com/dienda...hất-dựa-vào-điều-kiện-lọc.127619/#post-799207Anh giải thích sao phải cộng 0,0000001 được không anh ô kết quả số 7 sao bị lỗi nhỉ?
Em làm theo anh nhưng công thức khác thì nó chịu:
PHP:=IF(SUMPRODUCT((I$5:I$28=I5)*(J$5:J$28>J5)),"",I5)