Lọc danh sách duy nhất trong 1 bảng

Liên hệ QC
Anh xem lại file này, Công thức đâu có quá phức tạp đâu.
(đã rút gọn hết khả năng)
Cái đó không đoán trước được! Nói chung là những công thức mảng như bạn vừa làm luôn có những lỗi kỳ lạ (người xem được còn người ta thì lại không)
Tôi dùng Office 2010, đương nhiên xem được kết quả bình thường rồi
------------------
Ẹc... Ẹc... Bài này mà làm cho dữ liệu 1000 dòng chắc phải đi tò le quá
 
Cái đó không đoán trước được! Nói chung là những công thức mảng như bạn vừa làm luôn có những lỗi kỳ lạ (người xem được còn người ta thì lại không)
Tôi dùng Office 2010, đương nhiên xem được kết quả bình thường rồi
------------------
Ẹc... Ẹc... Bài này mà làm cho dữ liệu 1000 dòng chắc phải đi tò le quá
Anh ơi!
Em làm để biết khả năng của EX đến đâu thôi, và em nghĩ Minh Tiến cũng có ý như vậy.
Mấy cái hàm tự tạo bên trên đã ok rồi còn gì.
 
Anh xem lại file này, Công thức đâu có quá phức tạp đâu.
(đã rút gọn hết khả năng)
Mới mở file ra thì thấy kết quả ok, nhưng lật đi lật lại qua màn hình khác qoay lại trở về thì ra kết quả toàn chử "A" không à công thức thì vẩn thế này
Mã:
=IF(OR(H2="";ISERROR(INDEX(DS;--LEFT(RIGHT(rg;4);2);--RIGHT(rg;2))));"";INDEX(DS;--LEFT(RIGHT(rg;4);2);--RIGHT(rg;2)))
bấm phỉm tổ hợp ctrl + shift+enter thì ra công thức này
Mã:
=INDEX(DS;--LEFT(RIGHT(rg;4);2);--RIGHT(rg;2))
hihihi không hiểu vì sao?. mình dùng win7 office 2007
 
File của bạn đây
Mã:
Sub LocDuyNhat_Bang()
    On Error Resume Next
    Range([l9], [l65000]).ClearContents
    Set Dic = CreateObject("Scripting.Dictionary")
    For Each cls In Range([d5], [i50]).SpecialCells(2)
        If Not IsEmpty(cls) Then
            Dic.Add cls.Value, ""
        End If
    Next
    [l9].Resize(Dic.Count) = Application.Transpose(Dic.keys)
    [l9].Resize(Dic.Count).Sort [l9], 1
End Sub

Để tránh bị hiện tượng do thừa khoảng trắng nên nó hiểu là có 2 chữ b thì ta phải sửa thêm (tựa như cho thêm hàm Trim vào ấy, tôi đoán vậy thôi chứ tôi chưa thạo cái này lắm) thì viết thế nào hả các pác?

Cái nữa là tôi xóa bớt thành phần .SpecialCells(2) đi thì thấy nó vẫn chạy được bình thường mà, vậy tại sao lại phải cần thiết cho nó vào để làm gì?

Cái thành phần Application.Transpose(Dic.keys) là gì, quả thực trình độ của tôi hơi khó hình dung cái này.

Xin được nhờ trợ giúp cho.
 
Lần chỉnh sửa cuối:
Tôi thắc mắc là khi bỏ .Transpose thì kết quả của nó là a, a, a, a nhỉ? Rất mong bác nào biết về hàm Transpose này trong VBA xin chỉ bảo giúp tôi với.
 
Tôi thắc mắc là khi bỏ .Transpose thì kết quả của nó là a, a, a, a nhỉ? Rất mong bác nào biết về hàm Transpose này trong VBA xin chỉ bảo giúp tôi với.

Một cách dễ hiểu là khi xài Transpose, nó sẽ xoay mảng của bạn 90 độ, tức là hàng thành cột và cột thành hàng nên bạn mới gặp hiện tượng như vậy đấy.
 
thank you nhiu nhiu dúng là cái mình đang cần đây
 
Mình thấy Hàm UDF của nmHung49 cũng có thể viết thành:

Mã:
Public Function UniqueList(ByVal rng As Range, Id As Long)
 Dim sArr, Arr(), item, dic, i
  If rng.Count = 1 Then UniqueList = rng.Value: Exit Function
   Set dic = CreateObject("Scripting.Dictionary")
    sArr = rng.Value
    For Each item In sArr
      If Not IsEmpty(item) And Not dic.exists(item) Then
      i = i + 1
        If i = Id Then
       UniqueList = item
      Exit Function
     Else
    dic.Add item, ""
  End If: End If
   Next item
 UniqueList = ""
End Function

Khi lấy DS ta nhập công thức rồi chép xuống thoải mái:

=uniquelist($D$5:$I$17,ROW(1:1))

Như vậy, đỡ phải xác định độ dài mảng tránh lỗi trong DS. Mình chỉ mượn dic tìm đến Item mình cần là "biến".
Chào các bạn!
Cảm ơn bạn Sealand đã viết code này, tôi thấy Code này có một điểm như sau:

Giả sử trong vùng chọn mà có các Cell chứa công thức và công thức này trả về rỗng (hay trống) thì code này vẫn tính và xếp vào dãy không trùng.

Các bạn có thể sửa đọan code để nó không đếm & tính các cell có công thức trả về rỗng không?
Cảm ơn các bạn.
 
Web KT
Back
Top Bottom