Hàm nối chuỗi và sắp xếp dữ liệu tăng dần (2 người xem)

Liên hệ QC

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

hongphuong1997

Thành viên tiêu biểu
Tham gia
12/11/17
Bài viết
773
Được thích
322
Giới tính
Nữ
Các bạn ơi cho em hỏi có hàm nối chuỗi nào mà sắp xếp các giá trị tăng dần không nhỉ?
 
Đây anh ơi
Anh giúp em với nhé
Đây nhé em.
Mã:
Function sapxep(ParamArray mang()) As String
         Dim s As String, olit As Object, T, T2 As String, T1, i As Long
         Set olit = CreateObject("System.Collections.SortedList")
             For Each T In mang
                 For Each T1 In T
                    T2 = T1.Value
                    If Not olit.ContainsKey(T2) Then
                     olit.Add T2, T2
                    End If
                 Next
            Next
            For i = 0 To olit.Count - 1
                If Len(s) = 0 Then s = olit.getkey(i) Else s = s & ";" & olit.getkey(i)
            Next
            Set olit = Nothing
            sapxep = s
End Function
Mã:
=sapxep(AA2:BE7)
 
Đây anh ơi
Anh giúp em với nhé
PHP:
Public Function fGpe(ByVal Rng As Range, Deli As String) As String
Dim Arr(101), Cll As Range
For Each Cll In Rng
    If Cll <> Empty Then Arr(Cll.Value) = Cll.Value
Next Cll
For I = 0 To UBound(Arr)
    If Arr(I) <> Empty Then fGpe = fGpe & Arr(I) & Deli
Next I
If Len(fGpe) Then fGpe = Left(fGpe, Len(fGpe) - Len(Deli))
End Function
PHP:
=fGpe(AA7:BE7;";")
 
Đây anh ơi
Anh giúp em với nhé
Bạn tham khảo thêm:
HTML:
Function JoinTextH(ByVal tSort, ByVal Delimiter As String, ParamArray Args() As Variant)
    Dim Ndx As Long, Item, I As Long, Arr(), Str As String, aTmp
    With CreateObject("System.Collections.ArrayList")
        For Ndx = LBound(Args) To UBound(Args)
            If TypeOf Args(Ndx) Is Range Then
                For Each Item In Args(Ndx)
                    If Item <> Empty Then
                        aTmp = CLng(Item)
                        If Not .Contains(aTmp) Then .Add aTmp
                    End If
                Next
            Else
                Arr = Array(Args(Ndx))
                For I = LBound(Arr) To UBound(Arr)
                    aTmp = CLng(Arr(I))
                    If Not .Contains(aTmp) Then .Add aTmp
                Next I
            End If
        Next
        If .Count Then
            If IsMissing(tSort) Then GoTo Tiep 'Không sắp xếp giống như   JoinText
            .Sort
            If tSort <> 1 Then .Reverse    'tSort = 1 sắp xếp tăng dần ngược lại sắp xếp giảm dần
Tiep:
            Str = Join(.ToArray, Delimiter)
        End If
        JoinTextH = Str
    End With
End Function
 

File đính kèm

Thử code này xem:
Mã:
Function LocSo(Noi As String, Mang As Range) As String
Dim sO As Integer, Cel As Range, Tmp As String
    For sO = 0 To 99
        For Each Cel In Mang
            If Cel.Value <> "" Then
                If Cel.Value = sO Then
                    Tmp = Tmp & Cel & Noi
                    Exit For
                End If
            End If
        Next
    Next sO
    If Len(Tmp) Then LocSo = Left(Tmp, Len(Tmp) - Len(Noi))
End Function
Công thức: =LocSo(";", dữ liệu)
 
Đây nhé em.
Mã:
Function sapxep(ParamArray mang()) As String
         Dim s As String, olit As Object, T, T2 As String, T1, i As Long
         Set olit = CreateObject("System.Collections.SortedList")
             For Each T In mang
                 For Each T1 In T
                    T2 = T1.Value
                    If Not olit.ContainsKey(T2) Then
                     olit.Add T2, T2
                    End If
                 Next
            Next
            For i = 0 To olit.Count - 1
                If Len(s) = 0 Then s = olit.getkey(i) Else s = s & ";" & olit.getkey(i)
            Next
            Set olit = Nothing
            sapxep = s
End Function
Mã:
=sapxep(AA2:BE7)
Có cách nào bỏ
If Len(s) = 0
 
Đây anh ơi
Anh giúp em với nhé
Đông vui quá, ráng góp thêm 1 cách
Mã:
Function JoinNume(ByVal Deli As String, ParamArray sRng()) As String
  Dim sArr() As Long, i As Long, Rng, Cel, Tmp
  ReDim sArr(0 To 99)
  For Each Rng In sRng
    For Each Cel In Rng
      Tmp = Cel.Value
      If Len(Tmp) > 0 Then
        sArr(CLng(Tmp)) = 1
      End If
    Next
  Next
  Tmp = ""
  For i = 0 To 99
    If sArr(i) = 1 Then
      Tmp = Tmp & Deli & Format(i, "00")
    End If
  Next
  JoinNume = Mid(Tmp, Len(Deli) + 1, Len(Tmp))
End Function
 
Đông vui quá, ráng góp thêm 1 cách
Mã:
Function JoinNume(ByVal Deli As String, ParamArray sRng()) As String
  Dim sArr() As Long, i As Long, Rng, Cel, Tmp
  ReDim sArr(0 To 99)
  For Each Rng In sRng
    For Each Cel In Rng
      Tmp = Cel.Value
      If Len(Tmp) > 0 Then
        sArr(CLng(Tmp)) = 1
      End If
    Next
  Next
  Tmp = ""
  For i = 0 To 99
    If sArr(i) = 1 Then
      Tmp = Tmp & Deli & Format(i, "00")
    End If
  Next
  JoinNume = Mid(Tmp, Len(Deli) + 1, Len(Tmp))
End Function
Có vẻ giống của bác
Ba Tê
Anh à.:D.
.
 
Cháu xin cảm ơn bác @HieuCD ; Bác @Ba Tê ; anh @snow25 chị @
♫ђöล♥ßล†♥†µ♫ anh
leonguyenz

đã giúp đỡ cho cháu bài này.
Nhưng cháu thấy bài của chị ♫ђöล♥ßล†♥†µ♫ có nhiều tác dụng nhất
À mà cháu cũng không biết nữa
cháu xin cảm ơn tất cả các bác, anh chị
Và sửa lại cho cháu thêm điều kiện nữa là có sắp xếp nhưng không lọc trùng được không ạ (Tức là có bao nhiêu dữ liệu thì lấy bấy nhiêu)
 
......
Và sửa lại cho cháu thêm điều kiện nữa là có sắp xếp nhưng không lọc trùng được không ạ (Tức là có bao nhiêu dữ liệu thì lấy bấy nhiêu)
Muốn sắp xếp nhưng không lọc trùng, tức là "có bi nhiêu chơi bấy nhiêu" đúng hông? nếu đúng thế bạn thử code này xem:
Mã:
Public Function SapXep(Vung, DauPc)
    Dim Cll, Tam, A
    ReDim Tam(0 To 100, 1 To 1)
        For Each Cll In Vung
            A = Val(Cll)
            Tam(A, 1) = Tam(A, 1) & " " & Cll
        Next Cll
    SapXep = Join(Application.WorksheetFunction.Transpose(Tam), " ")
    SapXep = Replace(Application.WorksheetFunction.Trim(SapXep), " ", DauPc)
End Function
Quánh vu vơ đâu đó trên bảng tính:
=sapxep(AA2:BE7,"; ")
Cẩn thận khi chơi xả láng
Thân
 
Muốn sắp xếp nhưng không lọc trùng, tức là "có bi nhiêu chơi bấy nhiêu" đúng hông? nếu đúng thế bạn thử code này xem:
Mã:
Public Function SapXep(Vung, DauPc)
    Dim Cll, Tam, A
    ReDim Tam(0 To 100, 1 To 1)
        For Each Cll In Vung
            A = Val(Cll)
            Tam(A, 1) = Tam(A, 1) & " " & Cll
        Next Cll
    SapXep = Join(Application.WorksheetFunction.Transpose(Tam), " ")
    SapXep = Replace(Application.WorksheetFunction.Trim(SapXep), " ", DauPc)
End Function
Quánh vu vơ đâu đó trên bảng tính:
=sapxep(AA2:BE7,"; ")
Cẩn thận khi chơi xả láng
Thân
Cháu cảm ơn bác @concogia
 
QUOTE="♫ђöล♥ßล†♥†µ♫, post: 909620, member: 1148192"]
Bạn tham khảo thêm:
HTML:
Function JoinTextH(ByVal tSort, ByVal Delimiter As String, ParamArray Args() As Variant)
    Dim Ndx As Long, Item, I As Long, Arr(), Str As String, aTmp
    With CreateObject("System.Collections.ArrayList")
        For Ndx = LBound(Args) To UBound(Args)
            If TypeOf Args(Ndx) Is Range Then
                For Each Item In Args(Ndx)
                    If Item <> Empty Then
                        aTmp = CLng(Item)
                        If Not .Contains(aTmp) Then .Add aTmp
                    End If
                Next
            Else
                Arr = Array(Args(Ndx))
                For I = LBound(Arr) To UBound(Arr)
                    aTmp = CLng(Arr(I))
                    If Not .Contains(aTmp) Then .Add aTmp
                Next I
            End If
        Next
        If .Count Then
            If IsMissing(tSort) Then GoTo Tiep 'Không sắp xếp giống như   JoinText
            .Sort
            If tSort <> 1 Then .Reverse    'tSort = 1 sắp xếp tăng dần ngược lại sắp xếp giảm dần
Tiep:
            Str = Join(.ToArray, Delimiter)
        End If
        JoinTextH = Str
    End With
End Function
[/QUOTE]
Chị
♫ђöล♥ßล†♥†µ♫
ơi cho em hỏi trong công thức có 3 cú pháp là:

=JoinTextH(0;";";AA7:BE7)

=JoinTextH(1;";";AA7:BE7)

=JoinTextH(2;";";AA7:BE7)


Em thấy 2 cái này giống nhau

=JoinTextH(0;";";AA7:BE7)

=JoinTextH(2;";";AA7:BE7)


 
QUOTE="♫ђöล♥ßล†♥†µ♫, post: 909620, member: 1148192"]
Bạn tham khảo thêm:
HTML:
Function JoinTextH(ByVal tSort, ByVal Delimiter As String, ParamArray Args() As Variant)
    Dim Ndx As Long, Item, I As Long, Arr(), Str As String, aTmp
    With CreateObject("System.Collections.ArrayList")
        For Ndx = LBound(Args) To UBound(Args)
            If TypeOf Args(Ndx) Is Range Then
                For Each Item In Args(Ndx)
                    If Item <> Empty Then
                        aTmp = CLng(Item)
                        If Not .Contains(aTmp) Then .Add aTmp
                    End If
                Next
            Else
                Arr = Array(Args(Ndx))
                For I = LBound(Arr) To UBound(Arr)
                    aTmp = CLng(Arr(I))
                    If Not .Contains(aTmp) Then .Add aTmp
                Next I
            End If
        Next
        If .Count Then
            If IsMissing(tSort) Then GoTo Tiep 'Không sắp xếp giống như   JoinText
            .Sort
            If tSort <> 1 Then .Reverse    'tSort = 1 sắp xếp tăng dần ngược lại sắp xếp giảm dần
Tiep:
            Str = Join(.ToArray, Delimiter)
        End If
        JoinTextH = Str
    End With
End Function
Chị
♫ђöล♥ßล†♥†µ♫
ơi cho em hỏi trong công thức có 3 cú pháp là:

=JoinTextH(0;";";AA7:BE7)

=JoinTextH(1;";";AA7:BE7)

=JoinTextH(2;";";AA7:BE7)

Em thấy 2 cái này giống nhau

=JoinTextH(0;";";AA7:BE7)

=JoinTextH(2;";";AA7:BE7)


[/QUOTE]


Cái ấy kiểu là
1: Sắp xếp tăng dần:
Khác 1: Sắp xếp giảm dần
Bỏ trông: không sắp xếp
Do vậy 0 và 2 đều khác 1 ==> Sắp xếp giảm dần
 
Chị
♫ђöล♥ßล†♥†µ♫
ơi cho em hỏi trong công thức có 3 cú pháp là:

=JoinTextH(0;";";AA7:BE7)

=JoinTextH(1;";";AA7:BE7)

=JoinTextH(2;";";AA7:BE7)

Em thấy 2 cái này giống nhau

=JoinTextH(0;";";AA7:BE7)

=JoinTextH(2;";";AA7:BE7)





Cái ấy kiểu là
1: Sắp xếp tăng dần:
Khác 1: Sắp xếp giảm dần
Bỏ trông: không sắp xếp
Do vậy 0 và 2 đều khác 1 ==> Sắp xếp giảm dần
[/QUOTE]
Dạ em cảm ơn chị nhé
 
Bạn tham khảo thêm:
HTML:
Function JoinTextH(ByVal tSort, ByVal Delimiter As String, ParamArray Args() As Variant)
    Dim Ndx As Long, Item, I As Long, Arr(), Str As String, aTmp
    With CreateObject("System.Collections.ArrayList")
        For Ndx = LBound(Args) To UBound(Args)
            If TypeOf Args(Ndx) Is Range Then
                For Each Item In Args(Ndx)
                    If Item <> Empty Then
                        aTmp = CLng(Item)
                        If Not .Contains(aTmp) Then .Add aTmp
                    End If
                Next
            Else
                Arr = Array(Args(Ndx))
                For I = LBound(Arr) To UBound(Arr)
                    aTmp = CLng(Arr(I))
                    If Not .Contains(aTmp) Then .Add aTmp
                Next I
            End If
        Next
        If .Count Then
            If IsMissing(tSort) Then GoTo Tiep 'Không sắp xếp giống như   JoinText
            .Sort
            If tSort <> 1 Then .Reverse    'tSort = 1 sắp xếp tăng dần ngược lại sắp xếp giảm dần
Tiep:
            Str = Join(.ToArray, Delimiter)
        End If
        JoinTextH = Str
    End With
End Function
Chị
PacificPR
ơi hàm bị trục chặc rồi chị ơi
Chị sửa giúp em với
 

File đính kèm

Web KT

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

Back
Top Bottom