Mình cần giúp sửa lại hàm lọc duy nhất cho có tham số phân biệt trường hợp có dòng ẩn hay không theo mô tả trong file đính kèm

Liên hệ QC

hktanh

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/8/19
Bài viết
112
Được thích
8
Giới tính
Nam
Chào các bạn, mình có sưu tầm được một hàm lọc ra danh sách các giá trị duy nhất và vẫn giữ đúng thứ tự như cột dữ liệu ban đầu, tuy nhiên là hàm này chỉ có một trường hợp là hiển thị kết quả của tất cả các giá trị duy nhất trong cột được chọn, không phân biệt giá trị nào ẩn hoặc không. Vậy mình muốn nhờ các bạn sửa giúp mình code hàm này để sao cho có thêm tham số đối với trường hợp tính cả dòng ẩn hoặc bỏ qua dòng ẩn nhé, hoặc các bạn chỉ cần sửa lại hàm locduynhat này giúp mình sao cho nó có thể bỏ qua dòng ẩn cũng được vì trường hợp tính cả dòng ẩn thì mình đã có rồi, mình cảm ơn các bạn đã giúp đỡ :D
 

File đính kèm

  • Cần xin hàm lọc duy nhất có tham số bỏ qua dòng ẩn hay không.xlsm
    19.2 KB · Đọc: 20
Chào các bạn, mình có sưu tầm được một hàm lọc ra danh sách các giá trị duy nhất và vẫn giữ đúng thứ tự như cột dữ liệu ban đầu, tuy nhiên là hàm này chỉ có một trường hợp là hiển thị kết quả của tất cả các giá trị duy nhất trong cột được chọn, không phân biệt giá trị nào ẩn hoặc không. Vậy mình muốn nhờ các bạn sửa giúp mình code hàm này để sao cho có thêm tham số đối với trường hợp tính cả dòng ẩn hoặc bỏ qua dòng ẩn nhé, hoặc các bạn chỉ cần sửa lại hàm locduynhat này giúp mình sao cho nó có thể bỏ qua dòng ẩn cũng được vì trường hợp tính cả dòng ẩn thì mình đã có rồi, mình cảm ơn các bạn đã giúp đỡ :D
Dữ liệu thật của bạn chỉ có một cột hay nhiều cột? Để giúp xong lại báo là áp dụng không được nửa thì khổ. Nếu nhiều cột thì đưa dữ liệu thật lên đây hoặc dữ liệu mẫu nhưng sát thực tế.
 
Upvote 0
Dữ liệu thật của bạn chỉ có một cột hay nhiều cột? Để giúp xong lại báo là áp dụng không được nửa thì khổ. Nếu nhiều cột thì đưa dữ liệu thật lên đây hoặc dữ liệu mẫu nhưng sát thực tế.
mình đang cần một cột trước thôi bạn
Bài đã được tự động gộp:

Dữ liệu thật của bạn chỉ có một cột hay nhiều cột? Để giúp xong lại báo là áp dụng không được nửa thì khổ. Nếu nhiều cột thì đưa dữ liệu thật lên đây hoặc dữ liệu mẫu nhưng sát thực tế.
bạn cứ giải quyết bài toán một cột cho mình trước xong tính sau
 
Upvote 0
Chào các bạn, mình có sưu tầm được một hàm lọc ra danh sách các giá trị duy nhất và vẫn giữ đúng thứ tự như cột dữ liệu ban đầu, tuy nhiên là hàm này chỉ có một trường hợp là hiển thị kết quả của tất cả các giá trị duy nhất trong cột được chọn, không phân biệt giá trị nào ẩn hoặc không. Vậy mình muốn nhờ các bạn sửa giúp mình code hàm này để sao cho có thêm tham số đối với trường hợp tính cả dòng ẩn hoặc bỏ qua dòng ẩn nhé, hoặc các bạn chỉ cần sửa lại hàm locduynhat này giúp mình sao cho nó có thể bỏ qua dòng ẩn cũng được vì trường hợp tính cả dòng ẩn thì mình đã có rồi, mình cảm ơn các bạn đã giúp đỡ :D
Tôi làm rồi nhưng không đưa File do bạn sử dụng tiêu đề bài viết dông dài quá và cũng không rõ ràng, nên sửa lại cho gọn thế này "Giúp Lọc dữ liệu nguồn bỏ qua dòng ẩn vào sheet Kết quả và RemoveDuplicates cột F".

Sửa tiêu đề xong tôi sẽ gửi File.
 
Upvote 0
Tôi làm rồi nhưng không đưa File do bạn sử dụng tiêu đề bài viết dông dài quá và cũng không rõ ràng, nên sửa lại cho gọn thế này "Giúp Lọc dữ liệu nguồn bỏ qua dòng ẩn vào sheet Kết quả và RemoveDuplicates cột F".

Sửa tiêu đề xong tôi sẽ gửi File.
Cái tiêu đề của tôi liên quan đến kết quả à
 
Upvote 0
mình đang cần một cột trước thôi bạn
Bài đã được tự động gộp:


bạn cứ giải quyết bài toán một cột cho mình trước xong tính sau
mình đang cần một cột trước thôi bạn
Bài đã được tự động gộp:


bạn cứ giải quyết bài toán một cột cho mình trước xong tính sau
Mình chỉ giải quyrts 1 cột còn nếu 2 cột bạn tự giải quyết.
Mã:
Function LocduynhatNew(t As Range, Opt As Byte)
   On Error GoTo Thoat:
   Dim sCell As Range
   Dim i As Long
   Dim dArr()
   Dim oDic As Object
   ReDim dArr(1 To t.Cells.Count, 1 To 1)
   Set oDic = CreateObject("scripting.dictionary")
   oDic.comparemode = vbTextCompare
   For Each sCell In t
      If (Opt = 1) Or ((Opt = 2) And (Not sCell.EntireRow.Hidden)) Then
      
      If Not IsEmpty(sCell.Value) And Not oDic.exists(sCell.Value) Then
         i = i + 1
         dArr(i, 1) = sCell.Value
         oDic.Add sCell.Value, sCell.Value
      End If
      End If
   Next sCell
   
   For j = i + 1 To t.Cells.Count
       dArr(j, 1) = ""
   Next
   Set oDic = Nothing
   LocduynhatNew = dArr
   Erase dArr
Thoat:
End Function
 
Upvote 0
Mình chỉ giải quyrts 1 cột còn nếu 2 cột bạn tự giải quyết.
Mã:
Function LocduynhatNew(t As Range, Opt As Byte)
   On Error GoTo Thoat:
   Dim sCell As Range
   Dim i As Long
   Dim dArr()
   Dim oDic As Object
   ReDim dArr(1 To t.Cells.Count, 1 To 1)
   Set oDic = CreateObject("scripting.dictionary")
   oDic.comparemode = vbTextCompare
   For Each sCell In t
      If (Opt = 1) Or ((Opt = 2) And (Not sCell.EntireRow.Hidden)) Then
    
      If Not IsEmpty(sCell.Value) And Not oDic.exists(sCell.Value) Then
         i = i + 1
         dArr(i, 1) = sCell.Value
         oDic.Add sCell.Value, sCell.Value
      End If
      End If
   Next sCell
 
   For j = i + 1 To t.Cells.Count
       dArr(j, 1) = ""
   Next
   Set oDic = Nothing
   LocduynhatNew = dArr
   Erase dArr
Thoat:
End Function
Mình cảm ơn nhé, một cột cũng được, chỉ là hơi mất công để cho các cột còn lại ăn theo thôi :D thank_you
 
Upvote 0
Mình cảm ơn nhé, một cột cũng được, chỉ là hơi mất công để cho các cột còn lại ăn theo thôi :D thank_you
Thuật toán chưa tối ưu, tôi cố tình làm mảng 2 chiều và không thay đổi nhiều về code cũ để bạn phát triển thêm. Còn nếu muốn áp dụng cho dữ liệu chỉ có 1 cột duy nhất thì có cách khách tối ưu hơn.
 
Upvote 0
Thuật toán chưa tối ưu, tôi cố tình làm mảng 2 chiều và không thay đổi nhiều về code cũ để bạn phát triển thêm. Còn nếu muốn áp dụng cho dữ liệu chỉ có 1 cột duy nhất thì có cách khách tối ưu hơn.
ok bạn, vậy nếu xét về tốc độ thì code của bạn so với code ban đầu chắc cũng bằng nhau nhỉ :)
 
Upvote 0
Muốn đòi tốc độ, đòi tối ưu thì cho biết điều kiện để ẩn các dòng kia là gì.
 
Upvote 0
Upvote 0
Mình chỉ giải quyrts 1 cột còn nếu 2 cột bạn tự giải quyết.
Mã:
Function LocduynhatNew(t As Range, Opt As Byte)
   On Error GoTo Thoat:
   Dim sCell As Range
   Dim i As Long
   Dim dArr()
   Dim oDic As Object
   ReDim dArr(1 To t.Cells.Count, 1 To 1)
   Set oDic = CreateObject("scripting.dictionary")
   oDic.comparemode = vbTextCompare
   For Each sCell In t
      If (Opt = 1) Or ((Opt = 2) And (Not sCell.EntireRow.Hidden)) Then
     
      If Not IsEmpty(sCell.Value) And Not oDic.exists(sCell.Value) Then
         i = i + 1
         dArr(i, 1) = sCell.Value
         oDic.Add sCell.Value, sCell.Value
      End If
      End If
   Next sCell
  
   For j = i + 1 To t.Cells.Count
       dArr(j, 1) = ""
   Next
   Set oDic = Nothing
   LocduynhatNew = dArr
   Erase dArr
Thoat:
End Function
Mình đã thử hàm của bạn thành công trên cả những cột áp dụng ẩn dòng bằng AutoFilter, mong rằng sớm gặp lại bạn trong những bài viết tiếp theo của mình, về tốc độ của hàm mình thấy ok :)
 
Upvote 0
Cái tiêu đề của tôi liên quan đến kết quả à
Bạn dùng tiêu đề bài viết của bạn tra Google thử xem nó có tìm ra được bài viết của bạn hay không?
Nếu tìm không được thì nên thay đổi để giúp Google tra cho chính xác sẽ cần và giúp ích cho rất nhiều người.

Ông bà xưa có câu "Lời nói không mất tiền mua, lựa lời mà nói cho vừa lòng nhau".

Lời nói của bạn tôi thấy không vừa lòng nên tôi không sẳn lòng. Bài 4 nêu trên tôi chỉ sử dụng với 3 dòng code.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình đã thử hàm của bạn thành công trên cả những cột áp dụng ẩn dòng bằng AutoFilter, mong rằng sớm gặp lại bạn trong những bài viết tiếp theo của mình, về tốc độ của hàm mình thấy ok :)
Tôi chỉ giúp vậy cho bạn thôi, vì #2 mình đã hỏi rồi nhưng bạn không trả lời và vẫn giữ quan điểm đó (Tôi cho là quan điểm cứng nhắc có tố chất của người độc tài), nói thật tôi không thích cách trả lời của bạn, nhưng ở #2 tôi lỡ hỏi rồi thì ráng làm xong cái code để cho bạn thấy rằng tôi có trách nhiệm với câu trả lời của mình.
Còn về tốc độ thì không thể nhanh được do nó thao tác trực tiếp trên ô (bạn thấy nhanh là do dữ liệu ít, thử cở 10000 dòng sẽ thấy ngay kết quả chậm), muốn tốc độ nhanh hơn thì phải thao tác trên mảng, mà muốn vậy thì hãy trả lời câu hỏi ở #10 của anh @befaint nhưng theo tôi thì bạn sẽ không trả lời vì vẫn giữ quan điểm như #3.
 
Upvote 0
Web KT
Back
Top Bottom