Hỏi về hàm join trong excel (3 người xem)

Liên hệ QC

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

duynguyen3889

Thành viên mới
Tham gia
26/7/12
Bài viết
8
Được thích
1
Chào cả nhà, e ví dụ e có 1 bảng dữ liệu như file đính kèm. Mọi người có thể hướng dẫn cho e dùng hàm join để trả kết quả vào cột A các giá trị từ B2 tới G2 nối với nhau thành 1 chuỗi và ngăn cách bằng dấu ; bằng cách truyền vào giá trị từ B2 tới G2 được không?
ví dụ kết quả trả về sẽ là:
hàng 1 là: 1;1;2;4;5
hàng 2 là: 3;4;3;4;3
hàng 3 là: 2;2;3
.......
Và làm thế nào để biết được các giá trị trong các hàng có bị lặp hay không và trả về kết quả là các giá trị bị lặp đó?
Ví dụ kết quả trả về sẽ là:
hàng đầu tiên số 1 bị lặp,
hàng thứ 2 số 3, và 4 bị lặp,
hàng thứ 3 số 2 bị lặp.


thanks cả nhà
 

File đính kèm

Chào cả nhà, e ví dụ e có 1 bảng dữ liệu như file đính kèm. Mọi người có thể hướng dẫn cho e dùng hàm join để trả kết quả vào cột A các giá trị từ B2 tới G2 nối với nhau thành 1 chuỗi và ngăn cách bằng dấu ; bằng cách truyền vào giá trị từ B2 tới G2 được không?
ví dụ kết quả trả về sẽ là:
hàng 1 là: 1;1;2;4;5
hàng 2 là: 3;4;3;4;3
hàng 3 là: 2;2;3
.......
Và làm thế nào để biết được các giá trị trong các hàng có bị lặp hay không và trả về kết quả là các giá trị bị lặp đó?
Ví dụ kết quả trả về sẽ là:
hàng đầu tiên số 1 bị lặp,
hàng thứ 2 số 3, và 4 bị lặp,
hàng thứ 3 số 2 bị lặp.


thanks cả nhà
Ta cần 2 hàm:
Mã:
Function JoinText(ByVal Sep As String, ByVal IgnoreBlanks As Boolean, ParamArray sArray()) As String
  Dim tmpArr, SubArr, Arr(), Item, n As Long, tmp As String
  On Error Resume Next
  For Each SubArr In sArray
    tmpArr = SubArr
    If TypeName(tmpArr) <> "Variant()" Then
      tmp = IIf(TypeName(tmpArr) = "Error", "", Trim(CStr(tmpArr)))
      If IgnoreBlanks = False Or Len(tmp) Then
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = tmp
      End If
    Else
      For Each Item In tmpArr
        tmp = IIf(TypeName(Item) = "Error", "", Trim(CStr(Item)))
        If IgnoreBlanks = False Or Len(tmp) Then
          n = n + 1
          ReDim Preserve Arr(1 To n)
          Arr(n) = tmp
        End If
      Next
    End If
  Next
  If n Then JoinText = Join(Arr, Sep)
End Function
và:
Mã:
Function GetUnique(ParamArray sArray())
  Dim SubArr, Item
  On Error Resume Next
  With CreateObject("Scripting.Dictionary")
    For Each SubArr In sArray
      For Each Item In SubArr
        If Len(CStr(Item)) Then
          If Not .Exists(CStr(Item)) Then .Add CStr(Item), ""
        End If
      Next
    Next
    GetUnique = IIf(.Count = 0, "", .Keys)
  End With
End Function
Áp dụng:
- Cell H2, gõ công thức =JoinText("; ", TRUE,$A2:$G2)
- Cell I2, gõ công thức =JoinText("; ", TRUE,GetUnique(IF(COUNTIF(A2:G2,A2:G2)>1,A2:G2,""))) rồi bấm Ctrl + Shift + Enter
 

File đính kèm

Upvote 0
Chào cả nhà, e ví dụ e có 1 bảng dữ liệu như file đính kèm. Mọi người có thể hướng dẫn cho e dùng hàm join để trả kết quả vào cột A các giá trị từ B2 tới G2 nối với nhau thành 1 chuỗi và ngăn cách bằng dấu ; bằng cách truyền vào giá trị từ B2 tới G2 được không?
ví dụ kết quả trả về sẽ là:
hàng 1 là: 1;1;2;4;5
hàng 2 là: 3;4;3;4;3
hàng 3 là: 2;2;3
.......
Và làm thế nào để biết được các giá trị trong các hàng có bị lặp hay không và trả về kết quả là các giá trị bị lặp đó?
Ví dụ kết quả trả về sẽ là:
hàng đầu tiên số 1 bị lặp,
hàng thứ 2 số 3, và 4 bị lặp,
hàng thứ 3 số 2 bị lặp.


thanks cả nhà

Thêm 1 cách khác cho bạn tham khảo
 

File đính kèm

Upvote 0
Ta cần 2 hàm:
Mã:
Function JoinText(ByVal Sep As String, ByVal IgnoreBlanks As Boolean, ParamArray sArray()) As String
  Dim tmpArr, SubArr, Arr(), Item, n As Long, tmp As String
  On Error Resume Next
  For Each SubArr In sArray
    tmpArr = SubArr
    If TypeName(tmpArr) <> "Variant()" Then
      tmp = IIf(TypeName(tmpArr) = "Error", "", Trim(CStr(tmpArr)))
      If IgnoreBlanks = False Or Len(tmp) Then
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = tmp
      End If
    Else
      For Each Item In tmpArr
        tmp = IIf(TypeName(Item) = "Error", "", Trim(CStr(Item)))
        If IgnoreBlanks = False Or Len(tmp) Then
          n = n + 1
          ReDim Preserve Arr(1 To n)
          Arr(n) = tmp
        End If
      Next
    End If
  Next
  If n Then JoinText = Join(Arr, Sep)
End Function
và:
Mã:
Function GetUnique(ParamArray sArray())
  Dim SubArr, Item
  On Error Resume Next
  With CreateObject("Scripting.Dictionary")
    For Each SubArr In sArray
      For Each Item In SubArr
        If Len(CStr(Item)) Then
          If Not .Exists(CStr(Item)) Then .Add CStr(Item), ""
        End If
      Next
    Next
    GetUnique = IIf(.Count = 0, "", .Keys)
  End With
End Function
Áp dụng:
- Cell H2, gõ công thức =JoinText("; ", TRUE,$A2:$G2)
- Cell I2, gõ công thức =JoinText("; ", TRUE,GetUnique(IF(COUNTIF(A2:G2,A2:G2)>1,A2:G2,""))) rồi bấm Ctrl + Shift + Enter


Vậy muốn joint từ cột B2 đến B5 thì làm như thế nào anh ơi
 
Upvote 0
Vậy muốn joint từ cột B2 đến B5 thì làm như thế nào anh ơi

Hàm Jointext cập nhật mới nhất nó thế này:
Mã:
Function JoinText(ByVal Delimiter As String, ParamArray Arrays()) As String
  Dim aTmp, arr(), Item, tmp As String
  Dim i As Long, n As Long
  'On Error Resume Next
  For i = LBound(Arrays) To UBound(Arrays)
    aTmp = Arrays(i)
    If Not IsArray(aTmp) Then aTmp = Array(aTmp)
    For Each Item In aTmp
      If TypeName(Item) <> "Error" Then
        tmp = CStr(Item)
        n = n + 1
        ReDim Preserve arr(1 To n)
        arr(n) = tmp
      End If
    Next
  Next
  If n Then JoinText = Join(arr, Delimiter)
End Function
Join từ B2 đến B5, ta gõ công thức:
Mã:
=JoinText([COLOR=#ff0000]dấu phân cách[/COLOR],B2:B5)
Với dấu phân cách là bất cứ ký tự nào bạn chọn
Ví dụ:
Mã:
=JoinText([COLOR=#ff0000]"-"[/COLOR],B2:B5)
 
Upvote 0
Web KT

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

Back
Top Bottom