Xác định phần tử (dạng chuổi) xuất hiện nhiều lần nhất trong vùng (post bài giùm bạn)

Liên hệ QC
Nếu dữ liệu có Mã hàng giống nhau nhưng khác nhau ở chữ hoa và chữ thường, ví dụ: "HH1" và "hh1", thì kết quả lại cho ra "HH1" và "hh1" có số lần xuất hiện như nhau và = tổng số lần xuất hiện của cả "HH1" và "hh1"). Vậy phải sửa code như thế nào để khắc phục điều này hả bạn?
Chỉ cần sửa đoạn:
Mã:
If (Not IsEmpty(Clls)) And (Not .Exists(Clls.Value)) Then
 .Add Clls.Value, CountIfM(MRange, Clls.Value) - .Count / 10 ^ 10
End If
Thành:
Mã:
If (Not IsEmpty(Clls)) And (Not .Exists(UCase(Clls.Value))) Then
 .Add UCase(Clls.Value), CountIfM(MRange, Clls.Value) - .Count / 10 ^ 10
End If
 
Lần chỉnh sửa cuối:
Chỉ cần sửa đoạn:
Mã:
If (Not IsEmpty(Clls)) And (Not .Exists(Clls.Value)) Then
 .Add Clls.Value, CountIfM(MRange, Clls.Value) - .Count / 10 ^ 10
End If
Thành:
Mã:
If (Not IsEmpty(Clls)) And (Not .Exists(UCase(Clls.Value))) Then
 .Add UCase(Clls.Value), CountIfM(MRange, Clls.Value) - .Count / 10 ^ 10
End If

Cảm ơn bạn. Vậy trường hợp có 2 Mã hàng giống nhau, chỉ khác nhau ở chữ hoa và chữ thường(ví dụ: "hh01" và "HH01"), nếu muốn có kết quả là dạng Mã hàng xuất hiện đầu tiên thì sao? (Ví dụ: Mã hàng "hh01" xuất hiện trước "HH01", ở ô kết quả chỉ cần có mã hàng "hh01" (đại diện cho cả "HH01" luôn))
 
Cảm ơn bạn. Vậy trường hợp có 2 Mã hàng giống nhau, chỉ khác nhau ở chữ hoa và chữ thường(ví dụ: "hh01" và "HH01"), nếu muốn có kết quả là dạng Mã hàng xuất hiện đầu tiên thì sao? (Ví dụ: Mã hàng "hh01" xuất hiện trước "HH01", ở ô kết quả chỉ cần có mã hàng "hh01" (đại diện cho cả "HH01" luôn))
Tức là hh01, hH01, Hh01 và HH01 đều được xem là giống nhau và cái nào tìm thấy trước thì hiển thị cái đó, đúng không?
Nếu vậy thì.. càng dễ... Ở dưới dòng code
PHP:
With New Dictionary
ta thêm 1 dòng nữa:
PHP:
.CompareMode = 1
Code cuối cùng sẽ vầy
PHP:
Function LargeFreq(MRange As Range, Order As Long)
  'Vao menu Tools\References và check vào Microsoft Scripting Runtime
  Dim Clls As Range, i As Long
  With New Dictionary
    .CompareMode = 1
    For Each Clls In MRange
      If (Not IsEmpty(Clls)) And (Not .Exists(Clls.Value)) Then
        .Add Clls.Value, CountIfM(MRange, Clls.Value) - .Count / 10 ^ 10
      End If
    Next Clls
    If Order > .Count Then LargeFreq = "": Exit Function
    For i = 0 To .Count - 1
      If .Items(i) = WorksheetFunction.Large(.Items, Order) Then
        LargeFreq = .Keys(i)
        Exit Function
      End If
    Next i
  End With
End Function
Không cần dùng đên UCase hay LCase gì cả
-----------------
Nhân đây có 1 câu hỏi nhỏ đố mọi người
Nếu ta thay dòng With New Dictionary thành With CreateObject("Scripting.Dictionary"), xong ra bảng tính, bấm F9 thì toàn bộ công thức bị lỗi tất
2 cái With này đâu có khác nhau, tại sao lại có khác biệt về kết quả? Cách khắc phục?
 

File đính kèm

  • LargeFreq_02.xls
    39 KB · Đọc: 12
Lần chỉnh sửa cuối:
Xin chào mọi người , tôi rất cần sự trợ giúp của mọi người, tôi có 1 file excel, bao gồm cột A là mã hàng cột B là số lượng tương ứng của những mã hàng đó, cột C cũng là mã hàng và cột D cũng là số lượng tương ứng với những mã hàng cột C, Cột C và D lả những cột phụ , các mã của cột C sẽ trùng với một số mã cột A bây giờ tôi muốn so sánh xem nếu mã nào của cột C trùng với mã nào cột A thì xắp xếp lại theo ngang hàng nhau các mã cột C và A và số lượng của 2 cột A và C cũng sẽ xắp xếp đúng với các mã của 2 cột A và C có nghĩa là số lượng cột A là cột B sẽ sắp xếp theo cột A và số lượng cột D cũng sẽ theo những thứ tự của cột C. Để mình chủ yếu muốn so sánh số lượng cột D của cột C thay đổi như thế nào dể cập nhật lại số lượng của cột B bằng với cột D. Mọi người xin chỉ tôi nếu kết quả ra như ý muốn tôi sẽ hậu tạ chầu càe hoặc ă sáng cũng dược, nếu liên lạc qua phone có thể giải quyết duoc nhanh thì xin cho tôi xin số phone . Chân thành cám ơn. cũng cần gấp.
View attachment So sanh 2 cột và cập nhật lại số lượng.rar
 
Web KT
Back
Top Bottom