Cần hỗ trợ hàm VLookup tìm giá trị mới nhất (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thanhtaiteo

Thành viên mới
Tham gia
25/1/13
Bài viết
35
Được thích
1
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 .

upload_2018-3-26_7-26-0.png
 

File đính kèm

bạn xem công thức trong file nhé!
 

File đính kèm

bạn xem công thức trong file nhé!

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 ạ .

upload_2018-3-26_8-38-43.png
 
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
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),"")
 
Lần chỉnh sửa cuối:
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),"")

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 ạ
 
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 ạ
Chạy thử hàm sau, nhớ kết thúc bằng Ctrl+Shift+Enter:
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))
Bạn cho mượn file 200.000 dòng thử xem.
Về VBA thua bác ạ hỏi anh HieuCD xem...
 
Lần chỉnh sửa cuối:
Chạy thử hàm sau, nhớ kết thúc bằng Ctrl+Shift+Enter:
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))
Bạn cho mượn file 200.000 dòng thử xem.
Về VBA thua bác ạ hỏi anh HieuCD 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 .
 
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 .
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.
Ẩn đi khi không muốn động tới.
 

File đính kèm

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.
Ẩn đi khi không muốn động tới.

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ì ạ ??



upload_2018-3-29_8-14-51.png
 

File đính kèm

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
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.
Nhưng nếu có mảng phụ ta không cần phải lặp lại mảng nữa nên giảm bớt được rất nhiều tài nguyên RAM.
Cơ bản thì bạn thấy nó chạy ổn chưa ?
 

File đính kèm

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 ạ
Bạn chạy thử Sub này cho dữ liệu thật của bạn xem sao,
PHP:
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
 
Lần chỉnh sửa cuối:
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
Thử code
Mã:
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
 

File đính kèm

Góp vui với 1 cột phụ loại bỏ các ID có trước
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ỉ?
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)
 
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ỉ?
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)
Mình không dùng hàm Sumproduct vì nó khá nặng khi dữ liệu nhiều
Dữ liệu thời gian rất khó chịu, mình cũng không biết lúc nào nó bị lổi như trong trường hợp nầy
Thời gian trong file tính tới giây, 1 giây = 1/24/60/60 = 0.0000116, nên mình cộng thêm 0.0000001 (trừ hao 7 số lẻ, thực ra chỉ cần 6 số lẻ 0.000001), không tăng thêm giây nào nhưng lớn hơn giá trị gốc để khử lổi điều kiện J$5:J$28, ">"&
 
Web KT

Bài viết mới nhất

Back
Top Bottom