Hỏi về cách sort array? (1 người xem)

Liên hệ QC

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

ginkgo36

Thành viên mới
Tham gia
13/12/12
Bài viết
38
Được thích
7
Em chào mọi người,
Em có dữ liệu ở cột A như sau (các word cách bằng ;):

Row 1: AUTO; BODY; PREDILUTED; ECD FORM; RABBIT; FORMAT; CHROMOGENIC
Row 2: ECD FORM; BODY; PREDILUTED; CHROMO-GENIC; AUTO; RABBIT; FORMAT
Row 3: FORMAT; ECD FORM; AUTO
Row 4: ANHYDROUS; DENATURED; PREDILUTED; CHROMOGENIC

và output e muốn ra ở cột B như thế này:

Row 1: AUTO; BODY; CHROMOGENIC; ECD.FORM; FORMAT; PREDILUTED; RABBIT
Row 2: AUTO; BODY; CHROMO-GENIC; ECD FORM; FORMAT; PREDILUTED; RABBIT
Row 3: AUTO; ECD FORM; FORMAT
Row 4: ANHYDROUS; CHROMOGENIC; DENATURED; PREDILUTED

Em split chuỗi ở cột A và vào array rồi sau đó nối các chuỗi đó lại để ra kết quả như mong muốn. Nhưng em không biết làm sao khi tách chuỗi vô array mình có thể sort array đó theo aphabet để có kết quả như ở trên. Mong mọi người giúp đỡ. e xem cảm ơn
 
Em chào mọi người,
Em có dữ liệu ở cột A như sau (các word cách bằng ;):

Không đúng. Tôi nhìn thấy là các chuỗi được phân cách bởi 2 ký tự là ";" và " ". Đối với bạn có thể " " chả là gì cả nhưng bạn hãy tin rằng ký tự dấu cách " " là ký tự "ngag hàng" với tất cả các ký tự khác.

Row 1: AUTO; BODY; PREDILUTED; ECD FORM; RABBIT; FORMAT; CHROMOGENIC
Row 2: ECD FORM; BODY; PREDILUTED; CHROMO-GENIC; AUTO; RABBIT; FORMAT
Row 3: FORMAT; ECD FORM; AUTO
Row 4: ANHYDROUS; DENATURED; PREDILUTED; CHROMOGENIC

và output e muốn ra ở cột B như thế này:

Row 1: AUTO; BODY; CHROMOGENIC; ECD.FORM; FORMAT; PREDILUTED; RABBIT
Row 2: AUTO; BODY; CHROMO-GENIC; ECD FORM; FORMAT; PREDILUTED; RABBIT
Row 3: AUTO; ECD FORM; FORMAT
Row 4: ANHYDROUS; CHROMOGENIC; DENATURED; PREDILUTED

Em split chuỗi ở cột A và vào array rồi sau đó nối các chuỗi đó lại để ra kết quả như mong muốn. Nhưng em không biết làm sao khi tách chuỗi vô array mình có thể sort array đó theo aphabet để có kết quả như ở trên. Mong mọi người giúp đỡ. e xem cảm ơn

Một ví dụ

Module
Mã:
Public Sub QuickSort1DArray(Arr, iLo As Long, iHi As Long, ByVal sortAtoZ As Boolean)
'    Arr là mảng cần sắp xếp
'    sortAtoZ xác định cách sắp xếp tăng hay giảm
'    iLo là cận dưới của mảng Arr, iHi là cận trên của mảng Arr

Dim Lo As Long, Hi As Long, iMid, DoChange As Boolean, s

    Do
        Lo = iLo
        Hi = iHi
        
        iMid = Arr((Lo + Hi) \ 2)
        Do
            If sortAtoZ Then
                Do While Arr(Lo) < iMid
                    Lo = Lo + 1
                Loop
                Do While Arr(Hi) > iMid
                    Hi = Hi - 1
                Loop
            Else
                Do While Arr(Lo) > iMid
                    Lo = Lo + 1
                Loop
                Do While Arr(Hi) < iMid
                    Hi = Hi - 1
                Loop
            End If
            
            If Lo <= Hi Then
                If sortAtoZ Then
                    DoChange = (Arr(Lo) > Arr(Hi))
                Else
                    DoChange = (Arr(Lo) < Arr(Hi))
                End If
                If DoChange Then
                    s = Arr(Lo)
                    Arr(Lo) = Arr(Hi)
                    Arr(Hi) = s
                End If
                
                Lo = Lo + 1
                Hi = Hi - 1
            End If
        Loop Until Lo > Hi
        If Hi > iLo Then QuickSort1DArray Arr, iLo, Hi, sortAtoZ
        iLo = Lo
    Loop Until Lo >= iHi
End Sub

Sub Button1_Click()
Dim s As String, k As Long, Arr, result() As String
    ReDim result(1 To [B][COLOR=#ff0000]4[/COLOR][/B], 1 To 1)
    
    For k = 1 To[B][COLOR=#ff0000] 4[/COLOR][/B]
        s = Cells(k, 1).Value
        Arr = Split(s, "; ")
        QuickSort1DArray Arr, LBound(Arr), UBound(Arr), True
        result(k, 1) = Join(Arr, "; ")
    Next
    
    Range("B1").Resize(UBound(result)).Value = result
End Sub

Nếu số dòng khác đi thì sửa chố đỏ đỏ
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom