Chêm mấy từ Tây bồi thế này thì chắc chờ hỗ trợ hơi lâu đây.Chào các bác trên diễn đàn: Mình có 1 file gồm nhiều dòng.
Mình đang dùng excel 365, liệu có hàm nào tách được dữ liệu như hình không a.
Vì chưa tìm được hàm nào nên mình đăng trong mục lập trình.
Nhờ các bác xem giúp hoặc viết code giúp a. Thanks all
ThanksView attachment 291583
Chuỗi đó có thể có tới 40 phần tử và có thể trung nhiều phần tử bác aCó 1 phần tử trùng hay có thể có nhiều phần tử trùng hở thớt?
Bạn xem công thức này có đúng không nhéChào các bác trên diễn đàn: Mình có 1 file gồm nhiều dòng.
Mình đang dùng excel 365, liệu có hàm nào tách được dữ liệu như hình không a.
Vì chưa tìm được hàm nào nên mình đăng trong mục lập trình.
Nhờ các bác xem giúp hoặc viết code giúp a. Thanks all
ThanksView attachment 291583
Nếu tôi hiểu đúng thì phải gọi là lấy ra các phần tử có mặt trong cả 2 chuỗi.có thể có nhiều phần tử trùng bác maika ạ
Bài đã được tự động gộp:
Chuỗi đó có thể có tới 40 phần tử và có thể trung nhiều phần tử bác a
Chào các bác trên diễn đàn: Mình có 1 file gồm nhiều dòng.
Mình đang dùng excel 365, liệu có hàm nào tách được dữ liệu như hình không a.
Vì chưa tìm được hàm nào nên mình đăng trong mục lập trình.
Nhờ các bác xem giúp hoặc viết code giúp a. Thanks all
Public Function LocTrung(ByVal Str1 As String, ByVal Str2 As String) As String
Dim v As Variant, tmp As String
Str2 = ";" & Str2 & ";"
For Each v In Split(Str1, ";")
If InStr(1, Str2, ";" & v & ";") > 0 Then tmp = tmp & "; " & v
Next v
If Len(tmp) > 0 Then LocTrung = VBA.Mid(tmp, 3)
End Function
Sub GPE()
Dim Dic As Object, Lr&, Arr(), k
Dim Res(), i&, j%, a, key, Txt$, t
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
Lr = .Range("B" & Rows.Count).End(xlUp).Row
Arr = .Range("B3:C" & Lr).Value
ReDim Res(1 To UBound(Arr), 1 To 1)
For i = 1 To UBound(Arr)
For j = 1 To UBound(Arr, 2)
For a = LBound(Split(Arr(i, j), ";")) To _
UBound(Split(Arr(i, j), ";"))
key = Split(Arr(i, j), ";")(a)
If Not Dic.exists(key) Then
Dic.Add (key), ""
Else
t = t + 1
If t > 1 Then
Res(i, 1) = Res(i, 1) & ";" & key
Else
Res(i, 1) = key
End If
End If
Next a
Next j
t = 0: Dic.RemoveAll
Next i
.Range("D3:D" & Lr).ClearContents
.Range("D3").Resize(i - 1, 1).Value = Res
End With
MsgBox "Done"
Set Dic = Nothing
End Sub
Xin cảm ơn bạn đã giúp đỡ. Chuỗi của mình có nhiều phần tử trùng. Mình sẽ lưu lại học hỏi thêm aBạn xem công thức này có đúng không nhé
Bạn có 365 thì dùng
E3=INDEX(TEXTSPLIT(B3,";"),MATCH(MIN(IFERROR(SEARCH(TEXTSPLIT(B3,";"),C3),"")),IFERROR(SEARCH(TEXTSPLIT(B3,";"),C3),""),0))
Cách trên sẽ không đúng với trường hợp có nhiều ký tự trùng
Còn nếu bạn không có 365 thì cách làm dài hơn chút, bạn tham khảo file
Function DupText(ByVal Text1$, ByVal Text2$, Optional separator = ";", Optional ignoreCase = True) As String
With CreateObject("VBScript.RegExp")
.Global = 1: .ignoreCase = ignoreCase
.Pattern = "[" & separator & "]$|[" & separator & "]{2,}": If .test(Text2) Then Text2 = .Replace(Text2, "")
.Pattern = "([\\\[\].\{\}\(\)\?\+\|\*])|([" & separator & "]$)": If .test(Text2) Then Text2 = .Replace(Text2, "\$1")
.Pattern = "\b" & Replace(Text2, separator, "(?=[" & separator & "]|$|\b)|\b") & "(?=[" & separator & "]|$|\b)"
Dim ms, m, s$: Set ms = .Execute(Text1)
If ms.Count Then For Each m In ms: DupText = DupText & s & m: s = separator: Next
End With
End Function
Bạn thử nhé: ...Chào các bác trên diễn đàn: Mình có 1 file gồm nhiều dòng.
Mình đang dùng excel 365, liệu có hàm nào tách được dữ liệu như hình không a.
Vì chưa tìm được hàm nào nên mình đăng trong mục lập trình.
Nhờ các bác xem giúp hoặc viết code giúp a. Thanks all
ThanksView attachment 291583
=TEXTJOIN(";";1;IFERROR(IF(MATCH(TEXTSPLIT(B3;";");TEXTSPLIT(C3;";");0);TEXTSPLIT(B3;";");"");""))
=TEXTJOIN(";";1;IF(ISERROR(MATCH(TEXTSPLIT(B3;";");TEXTSPLIT(C3;";");0));"";TEXTSPLIT(B3;";")))
=MAP(B3:B7,C3:C7,LAMBDA(a,b,LET(t,TEXTSPLIT(a,,";"),ARRAYTOTEXT(UNIQUE(FILTER(t,ISNUMBER(MATCH(t,TEXTSPLIT(b,,";"),0))))))))
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Result", each Text.Combine(List.Distinct(List.Intersect({Text.Split([Cột 1],";"),Text.Split([Cột 2],";")})),", "))[Result]
in
#"Added Custom"