Lấy dữ liệu trùng của các ô nối lại với nhau

Liên hệ QC

vandia

Thành viên mới
Tham gia
18/5/19
Bài viết
29
Được thích
0
Chào các bạn!
Nhân ngày cuối tuần chúc các bạn một ngày nghỉ vui vẻ
Nhờ các bạn viết giúp hàm như file đính kèm
Xin cảm ơn các bạn
 

File đính kèm

  • Lấy dữ liệu trùng của các ô nối lại với nhau.xlsm
    9.3 KB · Đọc: 18
Đây là hàm lấy trùng:
PHP:
Public Function LayDuLieuTrung(ByVal s As String) As String
Dim lenS As Long, kyTu As String, temp As String
lenS = Len(s)
Do While lenS > 0
    kyTu = Left(s, 1)
    s = Replace(s, kyTu, "")
    If lenS - Len(s) > 1 Then
        temp = temp & "," & kyTu
    End If
    lenS = Len(s)
Loop
If Len(temp) > 0 Then LayDuLieuTrung = Mid(temp, 2)
End Function
Thêm hàm JoinText của ndu96081631 để nối chuỗi lại.

 
Upvote 0
"936303161" => "9,3,6,1"
Nếu kết quả trả về là "1,3,6,9" có được không bạn?
Được bạn ơi
View attachment 255080
bác nói e mới để ý :D
do dữ liệu của bạn ấy đã sai trước, em chỉ muốn hỏi là kết quả có lấy theo thứ tự không thôi :D
Cảm ơn bạn, mình bị nhầm không có số 9
Bài đã được tự động gộp:

Số 9 đâu có bị lặp?
Cảm ơn bạn mình bị nhầm số 9 không có
Bài đã được tự động gộp:

Đây là hàm lấy trùng:
PHP:
Public Function LayDuLieuTrung(ByVal s As String) As String
Dim lenS As Long, kyTu As String, temp As String
lenS = Len(s)
Do While lenS > 0
    kyTu = Left(s, 1)
    s = Replace(s, kyTu, "")
    If lenS - Len(s) > 1 Then
        temp = temp & "," & kyTu
    End If
    lenS = Len(s)
Loop
If Len(temp) > 0 Then LayDuLieuTrung = Mid(temp, 2)
End Function
Thêm hàm JoinText của ndu96081631 để nối chuỗi lại.

Cảm ơn bạn, sao mình không sử dụng hàm được nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
mình xin góp chút cốt
1615178443748.png
Mã:
Function Trung(ParamArray args() As Variant) As String
    Dim i As Long
    Dim cell As Range
    For i = LBound(args) To UBound(args)
        If TypeName(args(i)) = "Range" Then
            For Each cell In args(i)
                Trung = Trung & Loc(cell.Value)
            Next cell
        Else
            Trung = Trung & Loc(args(i))
        End If
    Next i
    If Len(Trung) > 0 Then
        Trung = Mid(Trung, 2)
    Else
        Trung = "khong co"
    End If
End Function

Private Function Loc(cell As Variant) As String
    Dim dai As Long, kyTu As String, temp As String
    dai = Len(cell)
    Do While dai > 0
        kyTu = Left(cell, 1)
        cell = Replace(cell, kyTu, "")
        If dai - Len(cell) > 1 Then
            temp = temp & "," & kyTu
        End If
        dai = Len(cell)
    Loop
    If Len(temp) > 0 Then Loc = "-" & Mid(temp, 2)
End Function
 

File đính kèm

  • Lấy dữ liệu trùng của các ô nối lại với nhau.xlsb
    15.3 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Google Sheets lèo cái được.

=TEXTJOIN(", ",true,UNIQUE(FILTER(mid(A1,row(INDIRECT("1:"&len(A1))),1),COUNTIF(mid(A1,row(INDIRECT("1:"&len(A1))),1),mid(A1,row(INDIRECT("1:"&len(A1))),1))>1)))

=ArrayFormula(TEXTJOIN(", ",true,query((QUERY(mid(A1,row(INDIRECT("1:"&len(A1))),1),"Select Col1,count(Col1) group by Col1",0)),"select Col1 where Col2>1",0)))

Bao giờ Excel mới 'nhớn' :p
 
Upvote 0
mình xin góp chút cốt
View attachment 255087
Mã:
Function Trung(ParamArray args() As Variant) As String
    Dim i As Long, s As String
    Dim cell As Range
    s = ""
    For i = LBound(args) To UBound(args)
        If TypeName(args(i)) = "Range" Then
            For Each cell In args(i)
                Trung = Trung & Loc(cell.Value)
            Next cell
        Else
            Trung = Trung & Loc(args(i))
        End If
    Next i
    If Len(Trung) > 0 Then
        Trung = Mid(Trung, 2)
    Else
        Trung = "khong co"
    End If
End Function

Private Function Loc(cell As Variant) As String
    Dim dai As Long, kyTu As String, temp As String
    dai = Len(cell)
    Do While dai > 0
        kyTu = Left(cell, 1)
        cell = Replace(cell, kyTu, "")
        If dai - Len(cell) > 1 Then
            temp = temp & "," & kyTu
        End If
        dai = Len(cell)
    Loop
    If Len(temp) > 0 Then Loc = "-" & Mid(temp, 2)
End Function
Cảm ơn bạn @lubu08 chuẩn đét rồi
Chúc bạn vui vẻ hạnh phúc
Bài đã được tự động gộp:

Google Sheets lèo cái được.

=TEXTJOIN(", ",true,UNIQUE(FILTER(mid(A1,row(INDIRECT("1:"&len(A1))),1),COUNTIF(mid(A1,row(INDIRECT("1:"&len(A1))),1),mid(A1,row(INDIRECT("1:"&len(A1))),1))>1)))

=ArrayFormula(TEXTJOIN(", ",true,query((QUERY(mid(A1,row(INDIRECT("1:"&len(A1))),1),"Select Col1,count(Col1) group by Col1",0)),"select Col1 where Col2>1",0)))

Bao giờ Excel mới 'nhớn' :p
Cảm ơn bạn @befaint mình sẽ sử dụng hàm của bạn @lubu08
 
Upvote 0
Google Sheets lèo cái được.

=TEXTJOIN(", ",true,UNIQUE(FILTER(mid(A1,row(INDIRECT("1:"&len(A1))),1),COUNTIF(mid(A1,row(INDIRECT("1:"&len(A1))),1),mid(A1,row(INDIRECT("1:"&len(A1))),1))>1)))

=ArrayFormula(TEXTJOIN(", ",true,query((QUERY(mid(A1,row(INDIRECT("1:"&len(A1))),1),"Select Col1,count(Col1) group by Col1",0)),"select Col1 where Col2>1",0)))

Bao giờ Excel mới 'nhớn' :p
1615179436779.png
1615179549732.png
Sao mình thử cả 2 công thức không được bạn ơi?
 
Upvote 0
MÌnh đã làm được, nhưng công thức của bạn chưa đáp ứng được yêu cầu của chủ thớt.

"Với điều kiện là hàm lấy được các ô nằm cách xa nhau" -> bạn định xử lý trên GG Sheet thế nào với yêu cầu này?
 
Upvote 0
Thêm cách tham khảo dùng office365
Mã:
=TEXTJOIN(",",,UNIQUE(FILTERXML("<a><b>"&TEXTJOIN("</b><b>",,MID(B3,SEQUENCE(LEN(B3)),1))&"</b></a>","//b[preceding::*=.]")))
or
=LET(a,MID(B3,SEQUENCE(LEN(B3)),1),TEXTJOIN(",",1,UNIQUE(IF(MMULT(N(a=TRANSPOSE(a)),SEQUENCE(LEN(B3))^0)>1,a,""))))
 
Upvote 0
Web KT
Back
Top Bottom