Nối chuỗi (nhiều ô) theo điều kiện ?

Liên hệ QC

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,894
Được thích
1,213
Xin chào các Bạn,
Như tiêu đề OT đã nêu nhờ các bạn xem & giúp đỡ OT trường hợp trong file đính kèm này với ạ.
 

File đính kèm

  • Lg.xlsx
    14.2 KB · Đọc: 36
Bạn thử nếu có Office2019 nhé
Mã:
=TEXTJOIN("/";TRUE;IF(B4:B41>0;A4:A41&":"&B4:B41;""))
Kết thúc bằng Ctrl + Shift + Enter
Xin chào "người anh hùng" PacificPR,
Chưa đúng Bạn ạ, ví dụ kết quả công thức của Bạn trả về chuỗi:
N1:4/N1:2100K
Nhưng OT muốn trả về là:
N1:4=2100K
OT đang sử dụng phiên bản OF365 thì không vấn đề gì nhưng tập tin sử dụng trên nhiều máy có phiên bản OF cũ (thậm trí 2007) do vậy mà "TEXTJOIN" không sử dụng được Bạn ạ.
Nhờ Bạn giúp đỡ cách làm khác ạ
 
Xin chào "người anh hùng" PacificPR,
Chưa đúng Bạn ạ, ví dụ kết quả công thức của Bạn trả về chuỗi:
N1:4/N1:2100K
Nhưng OT muốn trả về là:
N1:4=2100K
OT đang sử dụng phiên bản OF365 thì không vấn đề gì nhưng tập tin sử dụng trên nhiều máy có phiên bản OF cũ (thậm trí 2007) do vậy mà "TEXTJOIN" không sử dụng được Bạn ạ.
Nhờ Bạn giúp đỡ cách làm khác ạ
Bạn thử hàm này xem sao
Mã:
Function Noichuoi(ByVal Delimiter As String, _
        ByVal sRng As Range, ByVal eRng As Range) As String
    Dim tmp1(), tmp2(), I As Long, Tmp(), N As Long
    Dim Dic As Object, aTmp As String
Set Dic = CreateObject("Scripting.Dictionary")
tmp1 = sRng.Value: tmp2 = eRng.Value
For I = 1 To UBound(tmp2)
    If tmp2(I, 1) <> Empty Then
        aTmp = tmp1(I, 1)
    
        If Not Dic.Exists(aTmp) Then
            N = N + 1
            Dic.Add aTmp, N
            ReDim Preserve Tmp(1 To N)
            Tmp(N) = tmp1(I, 1) & ":" & tmp2(I, 1)
        Else
            Tmp(Dic.Item(aTmp)) = Tmp(Dic.Item(aTmp)) & "=" & tmp2(I, 1)
        End If
    End If
Next I
If N Then Noichuoi = Join(Tmp, Delimiter)
End Function
 

File đính kèm

  • Lg.xlsm
    17.8 KB · Đọc: 12
Lần chỉnh sửa cuối:
Bạn thử hàm này xem sao
Mã:
Function Noichuoi(ByVal Delimiter As String, _
        ByVal sRng As Range, ByVal eRng As Range) As String
    Dim tmp1(), tmp2(), I As Long, Tmp(), N As Long
    Dim Dic As Object, aTmp As String
Set Dic = CreateObject("Scripting.Dictionary")
tmp1 = sRng.Value: tmp2 = eRng.Value
For I = 1 To UBound(tmp2)
    If tmp2(I, 1) <> Empty Then
        aTmp = tmp1(I, 1)
   
        If Not Dic.Exists(aTmp) Then
            N = N + 1
            Dic.Add aTmp, N
            ReDim Preserve Tmp(1 To N)
            Tmp(N) = tmp1(I, 1) & ":" & tmp2(I, 1)
        Else
            Tmp(Dic.Item(aTmp)) = Tmp(Dic.Item(aTmp)) & "=" & tmp2(I, 1)
        End If
    End If
Next I
If N Then Noichuoi = Join(Tmp, Delimiter)
End Function
Ùi, gần được rồi Bạn,thừa một dấu "/" (2 dấu "/" liền nhau) ở những vị trí "=0" ạ, nhờ Bạn xem tiếp ạ :D
 
OT đang sử dụng phiên bản OF365 thì không vấn đề gì
nhưng tập tin sử dụng trên nhiều máy có phiên bản OF cũ (thậm trí 2007) do vậy mà "TEXTJOIN" không sử dụng được Bạn ạ.
Nhờ Bạn giúp đỡ cách làm khác ạ
Không sử dụng được mà muốn xem công thức ?

Góp vui hàm tự tạo
PHP:
Function MyTEXTJOIN(ByVal rng As Range) As String
    Dim arr, i As Long, ID As String, tmp As String
    arr = rng.Value
    For i = 1 To UBound(arr, 1)
        If arr(i, 2) <> 0 Then
            If arr(i, 1) <> ID Then
                tmp = tmp & "/" & arr(i, 1) & ":" & arr(i, 2)
                ID = arr(i, 1)
            Else
                tmp = tmp & "=" & arr(i, 2)
            End If
        End If
    Next
    MyTEXTJOIN = Mid(tmp, 2)
End Function
 
Xin chào các Bạn,
Như tiêu đề OT đã nêu nhờ các bạn xem & giúp đỡ OT trường hợp trong file đính kèm này với ạ.
Có người Anh trợ giúp mình gửi câu trả lời, Bạn xem thử.
=TEXTJOIN("/",1,IF(B4:B41>0,IF(A5:A42=A4:A41,A4:A41&":"&B4:B41&"="&B5:B42,IF(COUNTIF(A4:A41,A4:A41)=1,A4:A41&":"&B4:B41,"")),""))
 
...OT đang sử dụng phiên bản OF365 thì không vấn đề gì nhưng tập tin sử dụng trên nhiều máy có phiên bản OF cũ (thậm trí 2007) do vậy mà "TEXTJOIN" không sử dụng được Bạn ạ.
Nhờ Bạn giúp đỡ cách làm khác ạ
Cách chính thức để có thể dùng trên nhiều phiên bản là dùng cột phụ. Kiên nhẫn thêm cột phụ cho đến bao giờ làm được.
VBA không phải là giải pháp. Đối với chủ quan của bạn, 2003, 2007, 2019 là ba phiên bản. Đối với tôi, xls, xlsx, xlsm cũng là ba phiên bản.
 
Web KT
Back
Top Bottom