



Bài toán này nếu dùng VBA thì chẳng có khó khăn gì. Công thức thì chịu thua.Mình muốn nhờ các cao thủ giải đáp hộ bài toán này. Trong file đính kèm mình có 2 phần Input và Output. Mình muốn khi nhập vào như phần Input thì sẽ hiển thị ra dữ liệu như phần Output. Mong mọi người giúp đỡ.
Thanks các bạn nhiều!
Sub doc_ngang()
Dim data(), i, j
data = Range([B3], [B65536].End(3)).Resize(, 10).Value
For i = 1 To UBound(data, 2)
With CreateObject("scripting.dictionary")
For j = 2 To UBound(data)
If Not .exists(data(j, i)) Then
.Add data(j, i), ""
Else
data(j, i) = Empty
End If
Next
End With
Next
With CreateObject("scripting.dictionary")
For i = 1 To UBound(data, 2)
For j = 2 To UBound(data)
If data(j, i) <> "" Then
If Not .exists(data(j, i)) Then
.Add data(j, i), data(1, i)
Else
.Item(data(j, i)) = .Item(data(j, i)) & "," & data(1, i)
End If
End If
Next
Next
[P3].Resize(.Count) = Application.Transpose(.keys)
[Q3].Resize(.Count) = Application.Transpose(.items)
End With
End Sub


=IF(OR(N3=$B$4:$B$6);$B$3;"")&IF(OR(N3=$C$4:$C$6);","&$C$3;"")&IF(OR(N3=$D$4:$D$6);","&$D$3;"")&IF(OR(N3=$E$4:$E$6);","&$E$3;"")&IF(OR(N3=$F$4:$F$6);","&$F$3;"")&IF(OR(N3=$G$4:$G$6);","&$G$3;"")&IF(OR(N3=$H$4:$H$6);","&$H$3;"")&IF(OR(N3=$I$4:$I$6);","&$I$3;"")&IF(OR(N3=$J$4:$J$6);","&$J$3;"")&IF(OR(N3=$K$4:$K$6);","&$K$3;"")Bài toán này nếu dùng VBA thì chẳng có khó khăn gì. Công thức thì chịu thua.
=IF(OR(N3=$B$4:$B$6);$B$3;"")&IF(OR(N3=$C$4:$C$6);","&$C$3;"")&IF(OR(N3=$D$4:$D$6);","&$D$3;"")&IF(OR(N3=$E$4:$E$6);","&$E$3;"")&IF(OR(N3=$F$4:$F$6);","&$F$3;"")&IF(OR(N3=$G$4:$G$6);","&$G$3;"")&IF(OR(N3=$H$4:$H$6);","&$H$3;"")&IF(OR(N3=$I$4:$I$6);","&$I$3;"")&IF(OR(N3=$J$4:$J$6);","&$J$3;"")&IF(OR(N3=$K$4:$K$6);","&$K$3;"")
Em không hiểu về VBA mấy nên cố tình dùng hàm mảng
Hàm được kết quả nhưng thừa một dấu , ở đầu nhờ mọi người giải quyết nốt dấu , ở đầu


Cảm ơn thầy Tình thế bí quá đâm trò làm liều, may mà dùng Excel 2010 nên có thể lồng nhiều hàm if vậyThay vì nối nhau bằng dấu "," thì bạn cải tiến lại, nối chúng với nhau bằng khoảng trắng... Xong, TRIM kết quả và SUBSTITUTE(kết quả, " ", ",") là xong!
-------------------------------
Có điều: Cũng may ở đây chỉ có 10 chuổi, nếu là 100 chuổi hoặc hơn nữa thì không biết bạn có đủ kiên nhẫn để gõ không nữa?
Ẹc... Ẹc...
-------------------------------
Nói tóm lại: Những bài toán có liên quan đến NỐI CHUỔI đều không phải là thế mạnh của công thức (bác Bill cũng chưa viết hàm nào để nối chuổi từ mảng cả)
may mà dùng Excel 2010 nên có thể lồng nhiều hàm if vậy
Với bài toán này thì dùng một công thức sẽ khó có thể ra kết quả như ý được. Chỉ dùng VBA là hợp lý nhất thôi. Viết công thức như bạn hieuxd nếu dữ liệu nhiều thì hại não lắmThay vì nối nhau bằng dấu "," thì bạn cải tiến lại, nối chúng với nhau bằng khoảng trắng... Xong, TRIM kết quả và SUBSTITUTE(kết quả, " ", ",") là xong!
-------------------------------
Có điều: Cũng may ở đây chỉ có 10 chuổi, nếu là 100 chuổi hoặc hơn nữa thì không biết bạn có đủ kiên nhẫn để gõ không nữa?
Ẹc... Ẹc...
-------------------------------
Nói tóm lại: Những bài toán có liên quan đến NỐI CHUỔI đều không phải là thế mạnh của công thức (bác Bill cũng chưa viết hàm nào để nối chuổi từ mảng cả)





Nhưng mà code bài 2 của mình viết có đúng ý của bạn chưa?Với bài toán này thì dùng một công thức sẽ khó có thể ra kết quả như ý được. Chỉ dùng VBA là hợp lý nhất thôi. Viết công thức như bạn hieuxd nếu dữ liệu nhiều thì hại não lắm![]()
Đúng ý bạn ấy chưa mình hổng biết, nhưng đúng với ý mình rồiNhưng mà code bài 2 của mình viết có đúng ý của bạn chưa?


Với bài toán này thì dùng một công thức sẽ khó có thể ra kết quả như ý được. Chỉ dùng VBA là hợp lý nhất thôi. Viết công thức như bạn hieuxd nếu dữ liệu nhiều thì hại não lắm![]()




Em nghĩ dùng For Each thì bớt đi 1 vòng ForĐúng ý bạn ấy chưa mình hổng biết, nhưng đúng với ý mình rồi
Nhưng ( lại nhưng), chú Hải có thể bớt một em For For đi được hông, For nhiều quá chóng mặt lắm
Híc
Thân
Đúng ý mình rồi. Cảm ơn bạn nhiều.Nhưng mà code bài 2 của mình viết có đúng ý của bạn chưa?

Mình cũng ko biết nhiều về VBA nên mình mới hỏi trong Box Hàm và Công thức. Mình nghĩ nếu có cách nào làm bằng công thức mà ra được kết quả thì mình sẽ áp dụng. Nhưng với công thức dài ngoằng và rắc rối như của bạn thì mình sẽ chọn VBA dùng sẽ đơn giản hơn. Dù sao mình cũng cảm ơn bạn đã dành thời gian cho bài viết của mình.Lúc đầu mình thấy bạn hỏi ở Box Hàm và công thức nên cố tình làm bằng hàm và công thức thôi
nếu không hại não thì cũng không nên lão được
Trước đây mình không biết gì về VBA nên có viết một số hàm dài cả một trang giấy luôn
để hạn chế sai sót thì mình phải có cách kiểm soát chứ
Mình thường hay Copy đoạn công thức rồi sửa cứ hì hục gõ từ đầu đến cuối thì nhầm là không tránh được
