chieudainoinho
Thành viên mới
![](/diendan/data/PhoToDanhHieu/gold.gif)
- Tham gia
- 9/7/08
- Bài viết
- 4
- Được thích
- 2
File demo? không có sheet"HPVT" bạn ạNhờ các ace giúp đỡ. Dữ liệu demo đã miêu tả trong sheet "HPVT". Nhờ ace viết code sao cho khi chạy tương ứng với từng mã hiệu công việc ở cột "Nối chuỗi" sẽ tự động nối vật liệu, nhân công, máy; cách nhau bằng dấu ";". Cảm ơn ace đã quan tâm
Tham khảo: https://www.giaiphapexcel.com/diendan/threads/hàm-nối-chuỗi-có-điều-kiện.136582/#post-872090Nhờ các ace giúp đỡ. Dữ liệu demo đã miêu tả trong sheet "HPVT". Nhờ ace viết code sao cho khi chạy tương ứng với từng mã hiệu công việc ở cột "Nối chuỗi" sẽ tự động nối vật liệu, nhân công, máy; cách nhau bằng dấu ";". Cảm ơn ace đã quan tâm
C1=IF(A1,JoinText(", ",INDEX(B2:INDEX(B2:$B$23,IFERROR(MATCH(A1+1,$A2:$A$23,)-1,)),)),"")
Đưa dữ liệu thật lên đi bạn! Cái gì mà dữ liệu toàn 1, 2, 3.... Có khi nào dữ liệu thật chẳng giống vậy không?Nhờ các ace giúp đỡ. Dữ liệu demo đã miêu tả trong sheet "HPVT". Nhờ ace viết code sao cho khi chạy tương ứng với từng mã hiệu công việc ở cột "Nối chuỗi" sẽ tự động nối vật liệu, nhân công, máy; cách nhau bằng dấu ";". Cảm ơn ace đã quan tâm
Xin lỗi các ae đã không kiểm tra trước khi post lên. Dữ liệu chuẩn nhờ giúp đỡ đây ạ. Cảm ơn đã quan tâmĐưa dữ liệu thật lên đi bạn! Cái gì mà dữ liệu toàn 1, 2, 3.... Có khi nào dữ liệu thật chẳng giống vậy không?
Xin lỗi các ae đã không kiểm tra trước khi post lên. Dữ liệu chuẩn nhờ giúp đỡ đây ạ. Cảm ơn đã quan tâmĐưa dữ liệu thật lên đi bạn! Cái gì mà dữ liệu toàn 1, 2, 3.... Có khi nào dữ liệu thật chẳng giống vậy không?
Thử:Xin lỗi các ae đã không kiểm tra trước khi post lên. Dữ liệu chuẩn nhờ giúp đỡ đây ạ. Cảm ơn đã quan tâm
G4=IF(A4,TRIM(JoinText(", ",IF(C5:$C$200>0,INDEX(D5:INDEX(D5:$D$200,IFERROR(MATCH(A4+1,$A4:$A$200,)-1,)),),NA))),"")
Tìm kiếm trên mạng một hồi cũng thấy cái gần giống ý bạn; bạn tham khảo thế nào nhé:Xin lỗi các ae đã không kiểm tra trước khi post lên. Dữ liệu chuẩn nhờ giúp đỡ đây ạ. Cảm ơn đã quan tâm
Bài đã được tự động gộp:
Xin lỗi các ae đã không kiểm tra trước khi post lên. Dữ liệu chuẩn nhờ giúp đỡ đây ạ. Cảm ơn đã quan tâm
Bài này theo mình viết cho nó cái Sub nho nhỏ là Ok nhất, còn nếu dùng Function thì cũng viết cho nó cái ngắn gọn, dùng JoinText lại phải thêm....một đống công thức, rồi lại "cồng trôn híc híc", rắc rối quá. Tập viết code đi cho nhẹ người, bài nào cũng một đống công thức nhìn......ghê quá. Híc, bộ....bỏ nhậu rồi hả?Thử:
Kết thúc bằng Ctrl+Shift+Enter, rồi fill xuống.Mã:G4=IF(A4,TRIM(JoinText(", ",IF(C5:$C$200>0,INDEX(D5:INDEX(D5:$D$200,IFERROR(MATCH(A4+1,$A4:$A$200,)-1,)),),NA))),"")
Xem file kèm.
Thân
Bác viết giúp 1 code ngắn gọn cho mọi người tham khảo với ạBài này theo mình viết cho nó cái Sub nho nhỏ là Ok nhất, còn nếu dùng Function thì cũng viết cho nó cái ngắn gọn, dùng JoinText lại phải thêm....một đống công thức, rồi lại "cồng trôn híc híc", rắc rối quá. Tập viết code đi cho nhẹ người, bài nào cũng một đống công thức nhìn......ghê quá. Híc, bộ....bỏ nhậu rồi hả?
Thân
Công thức mà làm gì bạn? Code nhập giá trị thôi. Nếu cần chạy khi có sự thay đổi vd. trong cột D thì trong Sub Worksheet_Change gọi sub noi_chuoi. Thế thôi.Xin lỗi các ae đã không kiểm tra trước khi post lên. Dữ liệu chuẩn nhờ giúp đỡ đây ạ. Cảm ơn đã quan tâm
Sub noi_chuoi()
Dim r As Long, last_pos As Long, text As String, data(), result()
With ThisWorkbook.Worksheets("HPVT")
.Range("G4:G" & .Cells(Rows.Count, "G").End(xlUp).Row).ClearContents
r = .Cells(Rows.Count, "B").End(xlUp).Row
If r < 4 Then Exit Sub
data = .Range("A4:D" & r).Value
ReDim result(1 To r - 3, 1 To 1)
End With
For r = 1 To UBound(data)
If Len(data(r, 1)) Then
If last_pos Then result(last_pos, 1) = Mid(text, 2)
last_pos = r
text = ""
ElseIf Len(data(r, 2)) Then
text = text & ";" & data(r, 4)
End If
Next r
result(last_pos, 1) = Mid(text, 2)
ThisWorkbook.Worksheets("HPVT").Range("G4").Resize(UBound(result)).Value = result
End Sub
Lâu quá mới thấy anh vào chơi với anh em, cũng hơn năm rồi hén!Bài này theo mình viết cho nó cái Sub nho nhỏ là Ok nhất, còn nếu dùng Function thì cũng viết cho nó cái ngắn gọn, dùng JoinText lại phải thêm....một đống công thức, rồi lại "cồng trôn híc híc", rắc rối quá. Tập viết code đi cho nhẹ người, bài nào cũng một đống công thức nhìn......ghê quá. Híc, bộ....bỏ nhậu rồi hả?
Thân
Bởi vì nó giúp bạn thỏa sức "tung hoành". Hàm mang tính tổng quát nên có thể áp dụng gần như vào mọi việc liên quan đến nối chuỗi, chỉ cần bạn có sức.. "tưởng tượng" ra. Nó giống cách hoạt động của SUMPRODUCT. Vấn đề nằm ở đây!Thậm chí thằng em của anh không biết VBA, nhưng muốn chơi nối chuỗi bằng công thức thì không cái nào "hấp dẫn, tối ưu và hợp ý" bằng JoinText, JoinIf. cứ thế mà vận dụng
Quá đúng, quá đúng thầy!Bởi vì nó giúp bạn thỏa sức "tung hoành". Hàm mang tính tổng quát nên có thể áp dụng gần như vào mọi việc liên quan đến nối chuỗi, chỉ cần bạn có sức.. "tưởng tượng" ra. Nó giống cách hoạt động của SUMPRODUCT. Vấn đề nằm ở đây!