xin giúp mình đoạn code sắp xếp dữ liệu so sánh

Liên hệ QC

kscongtrinh

Thành viên mới
Tham gia
11/7/16
Bài viết
35
Được thích
1
Mình có 1 bảng dữ liệu gồm , dữ liệu gốc so sánh , Và dữ liệu cần so sánh sắp xếp lại như sau
giup dau.png
Khi sắp xếp dựa vào % giống nhau được config sẽ xuất ra kết quả , sắp xếp lại cùng hàng với dòng dữ liệu gốc như sau
Giup 1-sap xep.png
Xin chân thành cảm ơn bạn đã giúp đỡ
 

File đính kèm

  • file mau.xlsx
    12.7 KB · Đọc: 3
Upvote 0
Bạn chạy thử sub này xem sao
Mã:
Sub sosanhsapxep()
Dim Arr1 As Variant, Arr2 As Variant
Dim ListR() As Integer
Dim MyString As String
Dim Result As Variant
Dim i As Integer, j As Integer, k As Integer, x, z
Arr1 = Sheet1.Range("a1:a4")
Arr2 = Sheet1.Range("b1:c3")
Result = Arr1
ReDim Preserve Result(1 To UBound(Arr1), 1 To 3)
For i = 1 To UBound(Arr2)
    ReDim ListR(1 To UBound(Arr1))
    MyString = Mid(Arr2(i, 1), 1, 1)
    k = 0
    For j = 1 To UBound(Arr1)
        If Left(Arr1(j, 1), 1) = MyString Then
            k = k + 1
            ListR(k) = j
        End If
    Next j
    If k > 0 Then
        z = 2
        Do While k > 0
            ReDim Preserve ListR(1 To k)
            MyString = Mid(Arr2(i, 1), z, 1)
            k = 0
            For Each x In ListR
                If z < Len(Arr1(x, 1)) + 1 Then
                    If Mid(Arr1(x, 1), z, 1) = MyString Then
                        k = k + 1
                        ListR(k) = x
                    End If
                End If
            Next x
            z = z + 1
        Loop
    End If
    Result(ListR(1), 2) = Arr2(i, 1)
    Result(ListR(1), 3) = Arr2(i, 2)
Next i
Sheet1.Range("a12").Resize(UBound(Result), UBound(Result, 2)) = Result
End Sub
 
Upvote 0
Bạn chạy thử sub này xem sao
Mã:
Sub sosanhsapxep()
Dim Arr1 As Variant, Arr2 As Variant
Dim ListR() As Integer
Dim MyString As String
Dim Result As Variant
Dim i As Integer, j As Integer, k As Integer, x, z
Arr1 = Sheet1.Range("a1:a4")
Arr2 = Sheet1.Range("b1:c3")
Result = Arr1
ReDim Preserve Result(1 To UBound(Arr1), 1 To 3)
For i = 1 To UBound(Arr2)
    ReDim ListR(1 To UBound(Arr1))
    MyString = Mid(Arr2(i, 1), 1, 1)
    k = 0
    For j = 1 To UBound(Arr1)
        If Left(Arr1(j, 1), 1) = MyString Then
            k = k + 1
            ListR(k) = j
        End If
    Next j
    If k > 0 Then
        z = 2
        Do While k > 0
            ReDim Preserve ListR(1 To k)
            MyString = Mid(Arr2(i, 1), z, 1)
            k = 0
            For Each x In ListR
                If z < Len(Arr1(x, 1)) + 1 Then
                    If Mid(Arr1(x, 1), z, 1) = MyString Then
                        k = k + 1
                        ListR(k) = x
                    End If
                End If
            Next x
            z = z + 1
        Loop
    End If
    Result(ListR(1), 2) = Arr2(i, 1)
    Result(ListR(1), 3) = Arr2(i, 2)
Next i
Sheet1.Range("a12").Resize(UBound(Result), UBound(Result, 2)) = Result
End Sub
Đoạn code đang lỗi,
Cáy này mình có thể cải thiện chọn vùng chọn gốc , vùng chọn cần so sanh không phụ thuộc vào
Arr1 = Sheet1.Range("a1:a4")
Arr2 = Sheet1.Range("b1:c3")
thứ 2 so sánh hiện tại dựa trên thuật toán Bảng chữ cái "abc...xyz" , có thể so sánh dựa chữ tiếng việt ví dụ "anh cần em " VS "em cần anh" giống nhau 100%. thì sắp xếp lại ạ
Cảm ơn bạn rất nhiều
 
Upvote 0
@kscongtrinh code trên đã chạy thử trên file bạn gửi thì không có lỗi. Việc này không biết có phải do số liệu có gì khác file mẫu hay không, bạn kiểm tra lại xem lỗi chỗ nào rồi quăng lên.
Arr1, Arr2 là để chạy trên mảng cho nhanh vậy thôi.
file mẫu của bạn là so sánh ký tự thì viết so sánh ký tự, còn như "anh cần em" vs "em cần anh" thì là so sánh từ rồi nhé. Nếu cần thì bạn có mẫu lên mới hiệu chỉnh được.
 
Upvote 0
@kscongtrinh code trên đã chạy thử trên file bạn gửi thì không có lỗi. Việc này không biết có phải do số liệu có gì khác file mẫu hay không, bạn kiểm tra lại xem lỗi chỗ nào rồi quăng lên.
Arr1, Arr2 là để chạy trên mảng cho nhanh vậy thôi.
file mẫu của bạn là so sánh ký tự thì viết so sánh ký tự, còn như "anh cần em" vs "em cần anh" thì là so sánh từ rồi nhé. Nếu cần thì bạn có mẫu lên mới hiệu chỉnh được.
Lắm khi nhà họ đâu có lường hết được đâu ạ. Cứ tưởng cái VBA nó thông minh lắm. Cứ tưởng nó nhẩy vào trong đầu đọc ý tưởng của con người và thực công việc mà người ta đang suy nghĩ vậy :p:p:p
 
Upvote 0
...
thứ 2 so sánh hiện tại dựa trên thuật toán Bảng chữ cái "abc...xyz" , có thể so sánh dựa chữ tiếng việt ví dụ "anh cần em " VS "em cần anh" giống nhau 100%. thì sắp xếp lại ạ
Cảm ơn bạn rất nhiều
Thế thì "cần anh em" và "anh em cần" có giống nhau không?

Thuật toán cái mốc xì. Đỏi hỏi kiểu này là đòi hỏi cả một quyển tự điển thuật ngữ.

Chú:
VS viết tắt kiểu mới có nghĩa là "cùng với". Nhưng nếu hiểu theo tiếng Anh thì có nghĩa là "đối với". Nghĩa khác nhau, nếu không muốn nói là có trường hợp nghĩa đối chọi.
 
Upvote 0
Bạn chạy thử sub này xem sao
Mã:
Sub sosanhsapxep()
Dim Arr1 As Variant, Arr2 As Variant
Dim ListR() As Integer
Dim MyString As String
Dim Result As Variant
Dim i As Integer, j As Integer, k As Integer, x, z
Arr1 = Sheet1.Range("a1:a4")
Arr2 = Sheet1.Range("b1:c3")
Result = Arr1
ReDim Preserve Result(1 To UBound(Arr1), 1 To 3)
For i = 1 To UBound(Arr2)
    ReDim ListR(1 To UBound(Arr1))
    MyString = Mid(Arr2(i, 1), 1, 1)
    k = 0
    For j = 1 To UBound(Arr1)
        If Left(Arr1(j, 1), 1) = MyString Then
            k = k + 1
            ListR(k) = j
        End If
    Next j
    If k > 0 Then
        z = 2
        Do While k > 0
            ReDim Preserve ListR(1 To k)
            MyString = Mid(Arr2(i, 1), z, 1)
            k = 0
            For Each x In ListR
                If z < Len(Arr1(x, 1)) + 1 Then
                    If Mid(Arr1(x, 1), z, 1) = MyString Then
                        k = k + 1
                        ListR(k) = x
                    End If
                End If
            Next x
            z = z + 1
        Loop
    End If
    Result(ListR(1), 2) = Arr2(i, 1)
    Result(ListR(1), 3) = Arr2(i, 2)
Next i
Sheet1.Range("a12").Resize(UBound(Result), UBound(Result, 2)) = Result
End Sub
Mình test file mẫu ok lắm bạn, cảm ơn bạn nhiều nhưng mình test file khác thì nó báo lỗi2.png
Bài đã được tự động gộp:

@kscongtrinh code trên đã chạy thử trên file bạn gửi thì không có lỗi. Việc này không biết có phải do số liệu có gì khác file mẫu hay không, bạn kiểm tra lại xem lỗi chỗ nào rồi quăng lên.
Arr1, Arr2 là để chạy trên mảng cho nhanh vậy thôi.
file mẫu của bạn là so sánh ký tự thì viết so sánh ký tự, còn như "anh cần em" vs "em cần anh" thì là so sánh từ rồi nhé. Nếu cần thì bạn có mẫu lên mới hiệu chỉnh được.
Mình thực sự cảm ơn bạn rất nhiều đã giúp đỡ
 

File đính kèm

  • CHECKING.xlsx
    55.2 KB · Đọc: 10
Upvote 0
@kscongtrinh file bài 11 khác mẫu của bài 1 thì làm sao mà áp dụng code bài trên được.
Bạn muốn làm gì với file của bài 11
 
Upvote 0
Web KT

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

Back
Top Bottom