Giúp nối chuỗi từ nhiều dòng của 1 cột vào 1 ô theo điều kiện (1 người xem)

Liên hệ QC

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

tanirac

Thành viên mới
Tham gia
13/7/09
Bài viết
9
Được thích
1
Hiện mình làm một bảng kê chi tiết các trụ đèn được sửa chữa của các trạm theo công việc 1, công việc 2...
Ví dụ:
Cột A:
A1= Trụ 1
A2= Trụ 2
A3= Trụ 3
A4= Trụ 4
A5= Trụ 5
....
An= Trụ n

Nỗi chuỗi thành:
Ô B1 = Trụ 1, 2, 3, 4, 5, ..., n

Yêu cầu đặt ra là:

Viết hàm nối chuỗi các tên số trụ bên sheet "Dữ liệu" thỏa điều kiện giá trị bên cột "công việc 1" # 0 hoặc # ô rỗng, các tên số trụ trong chuỗi được cách nhau bằng dấu ", " và được lượt bớt chữ "Trụ" phía trước.
Mẫu ví dụ theo file đính kèm

Chú ý: Bảng dữ liệu thực tế rất nhiều trạm và mỗi trạm lại rất nhiều trụ và có điều kiện nên không sử dụng được hàm nối chuỗi thông dụng như: "&" hay CONCATENATE

Mình đã tìm kiếm rất nhiều chưa thấy có 1 hướng dẫn cụ thể nào. Rất mong được các bạn giúp đỡ.
 

File đính kèm

Hiện mình làm một bảng kê chi tiết các trụ đèn được sửa chữa của các trạm theo công việc 1, công việc 2...
Ví dụ:
Cột A:
A1= Trụ 1
A2= Trụ 2
A3= Trụ 3
A4= Trụ 4
A5= Trụ 5
....
An= Trụ n

Nỗi chuỗi thành:
Ô B1 = Trụ 1, 2, 3, 4, 5, ..., n

Yêu cầu đặt ra là:

Viết hàm nối chuỗi các tên số trụ bên sheet "Dữ liệu" thỏa điều kiện giá trị bên cột "công việc 1" # 0 hoặc # ô rỗng, các tên số trụ trong chuỗi được cách nhau bằng dấu ", " và được lượt bớt chữ "Trụ" phía trước.
Mẫu ví dụ theo file đính kèm

Chú ý: Bảng dữ liệu thực tế rất nhiều trạm và mỗi trạm lại rất nhiều trụ và có điều kiện nên không sử dụng được hàm nối chuỗi thông dụng như: "&" hay CONCATENATE

Mình đã tìm kiếm rất nhiều chưa thấy có 1 hướng dẫn cụ thể nào. Rất mong được các bạn giúp đỡ.

Bạn thử file này xem sao.
 

File đính kèm

Bạn thử file này xem sao.

1> Thứ nhất:
Hàm JoinText mà bạn đang dùng là hàm "đời đầu". Bây giờ đã được cải tiến lại 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
2> Thứ 2:
Bạn cố tình sửa 1 đoạn trong hàm thành Arr(n) = Right(CStr(Item), Len(CStr(Item)) - 4) ---> Như vậy là phá vỡ tính tổng quát của hàm nên nó chỉ phục vụ duy nhất cho bài này thôi (đây là điều mà tôi không bao giờ thích làm)
------------------
Vậy nếu là tôi thì tôi sẽ dùng version mới nhất. Còn công thức trên bảng tính
Mã:
="Trụ: "&JoinText(", ",TRUE,IF('Dữ liệu'!B4:B13<>"",'Dữ liệu'!A4:A13,""))
Sẽ được sửa thành
Mã:
="Trụ: "&SUBSTITUTE(JoinText(", ",IF('Dữ liệu'!B4:B13<>"",'Dữ liệu'!A4:A13,NA())),"Trụ ","")
hoặc:
Mã:
="Trụ: "&SUBSTITUTE(JoinText(", ",IF(1/('Dữ liệu'!B4:B13<>""),'Dữ liệu'!A4:A13)),"Trụ ","")
Điều này có nghĩa là:
- Hàm vẫn mang tính tổng quát vốn có
- Ai muốn sửa đổi thế nào thì tự xử lý dữ liệu thêm (sửa ở bên ngoài bảng tính bằng các hàm khác chứ không sửa lại code trong hàm)
 
Lần chỉnh sửa cuối:
Mình đã thử tạo Macro có tên "JoinText" rồi copy past đoạn code trên vào Macro và chạy. Sau đó điền công thức vào bảng tính nhưng không thể thực hiện được.
Bạn vui lòng hướng dẫn mình cách thực thi hàm trên với. Thank
 
Mình đã thử tạo Macro có tên "JoinText" rồi copy past đoạn code trên vào Macro và chạy. Sau đó điền công thức vào bảng tính nhưng không thể thực hiện được.
Bạn vui lòng hướng dẫn mình cách thực thi hàm trên với. Thank

Download file về xem cho lẹ
 

File đính kèm

Cảm ơn bạn rất nhiều. Chúc bạn sức khỏe và thành công nhé
 
Mình đã tìm kiếm rất nhiều chưa thấy có 1 hướng dẫn cụ thể nào. Rất mong được các bạn giúp đỡ.

Bạn tham khảo 1 cách nhập liệu khác sau đó dùng PivotTable để được kết quả.
 

File đính kèm

Mình có file cần gom nhóm và nối chuỗi tương ứng theo từng nhóm.Vùng dữ liệu có mấy trăm ngàn dòng rất lớn. Cần gom theo từng nhóm, mỗi nhóm 1 dòng và kết nối các chuỗi tương ứng lại thành 1 dòng. Áp dụng hàm JoinText nhưng không được như kết quả. Mong các bạn góp ý kiến sửa dùm. Tất cảm ơn.
 

File đính kèm

Lần chỉnh sửa cuối:
mình ko xem đc bản excel
 
Mình có file cần gom nhóm và nối chuỗi tương ứng theo từng nhóm.Vùng dữ liệu có mấy trăm ngàn dòng rất lớn. Cần gom theo từng nhóm, mỗi nhóm 1 dòng và kết nối các chuỗi tương ứng lại thành 1 dòng. Áp dụng hàm JoinText nhưng không được như kết quả. Mong các bạn góp ý kiến sửa dùm. Tất cảm ơn.

em cũng đang có vướng mắc giống a/c quá. Nhờ mng chỉ cách giúp ạ,
 
Cho em hỏi tí nếu để thoả mãn 2 điều kiện thì thế nào ạ?

Tôi thấy bạn gõ trên bảng tính công thức này:
Mã:
=JoinText("",IF(AND(B1:B10<E1,C1:C10>E1),A1:A10,""))
Phát biểu đúng nhưng triển khai sai. Với công thức mảng thì không có cái vụ AND OR gì ở đây cả.
- Muốn AND thì phải dùng phép nhân
- Muốn OR thì dùng phép cộng
Ví dụ:
Mã:
=JoinText("",IF((B1:B10<E1)*(C1:C10>E1),A1:A10,NA()))
 
Em xin chân thành cảm ơn bác
 
Mấy bác giúp e cho ra kết quả như cột L52.(file đính kèm).
Em muốn nối các hàng ở cột K lại với nhau nếu mã số ở cột B giống nhau!
Em cảm ơn!
 

File đính kèm

Web KT

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

Back
Top Bottom