congkien2610
Thành viên mới

- Tham gia
- 4/4/10
- Bài viết
- 16
- Được thích
- 0
thử dùng công thức này xemMình dùng hàm Vlookup nhưng chỉ cho ra 1 kết quả.
Anh chị nào giúp em cách làm này với. và đưa ra kết quả chi tiết trong 1 ô.
Vì 1 loại hàng hóa trong công ty nằm ở rất nhiều vị trí khác nhau.
THANKS rất nhiều !!!
Bạn nói rằng:thử dùng công thức này xem
Thế, nếu có từ 20 vị trí khác nhau, bạn dùng 20 name chắc?công thức này chỉ được 11 vị trí khác nhau
nếu viết code thì em chào thuabạn nói rằng:
Thế, nếu có từ 20 vị trí khác nhau, bạn dùng 20 name chắc?
ẹc... ẹc...
Cái này dùng vba mới là chuẩn nhất ---> nối chuổi có điều kiện mà dùng công thức là... Thua!
Hoàn toàn không khó như bạn nghĩ đâu!nếu viết code thì em chào thua
đành phải nhờ đén các bác vậy
bác nói em nghe thì dễ nhưng để đạt đươch như bacd nói thì chắc em phai theo bác đèn sách 1 thời gian đóhoàn toàn không khó như bạn nghĩ đâu!
Thuật toán thế này:
- duyệt các cell ở cột mã số
- nếu thấy cell nào trùng với mã mình đang tìm thì chiếu sang cột chi tiết, lấy giá trị ấy cho vào 1 biến (ví dụ là temp)
- lại duyệt tiếp, nếu thấy mã mình đang tìm thì.. Lại chiếu sang cột chi tiết, lấy giá trị ấy nối vào temp
- vân vân... Cứ thế đến hết
---------------------------
thuật toán này quá tầm thường, tôi nghĩ là ai cũng hiểu ấy chứ! Việc còn lại là chuyển giao ngôn ngữ, sao cho vba nó "hiểu" được những gì ta muốn nói nãy giờ ---> cái này chỉ là chuyện nhỏ, học 1 tí bài viết của sư phụ ptm0412: giới thiệu cơ bản về vòng lặp for . . . Next là có ngay các kiến thức cần thiết!
Cốt lõi bây giờ là Bác Ndu giải quyết cho bạn congkien2610 cái yêu cầu đã hỏi trước đi đã nhỉ ?Nguyên văn bởi ndu96081631![]()
![]()
hoàn toàn không khó như bạn nghĩ đâu!
Thuật toán thế này:
- duyệt các cell ở cột mã số
- nếu thấy cell nào trùng với mã mình đang tìm thì chiếu sang cột chi tiết, lấy giá trị ấy cho vào 1 biến (ví dụ là temp)
- lại duyệt tiếp, nếu thấy mã mình đang tìm thì.. Lại chiếu sang cột chi tiết, lấy giá trị ấy nối vào temp
- vân vân... Cứ thế đến hết
---------------------------
thuật toán này quá tầm thường, tôi nghĩ là ai cũng hiểu ấy chứ! Việc còn lại là chuyển giao ngôn ngữ, sao cho vba nó "hiểu" được những gì ta muốn nói nãy giờ ---> cái này chỉ là chuyện nhỏ, học 1 tí bài viết của sư phụ ptm0412: giới thiệu cơ bản về vòng lặp for . . . Next là có ngay các kiến thức cần thiết!
bác nói em nghe thì dễ nhưng để đạt đươch như bacd nói thì chắc em phai theo bác đèn sách 1 thời gian đó
Làm tạm "zì" đi, còn gì khác tính sauMình dùng hàm Vlookup nhưng chỉ cho ra 1 kết quả.
Anh chị nào giúp em cách làm này với. và đưa ra kết quả chi tiết trong 1 ô.
Vì 1 loại hàng hóa trong công ty nằm ở rất nhiều vị trí khác nhau.
THANKS rất nhiều !!!
Tạm dùng code này đi:Cốt lõi bây giờ là Bác Ndu giải quyết cho bạn congkien2610 cái yêu cầu đã hỏi trước đi đã nhỉ ?
Function JoinIf(LValue, LRange As Range, ColIndex As Long, Optional Sep = "") As String
Dim Clls As Range, , Temp As String
On Error Resume Next
If LValue <> "" Then
For Each Clls In LRange.Resize(, 1)
If Clls.Value = LValue Then
Temp = Temp & Sep & Clls(, ColIndex)
End If
Next
JoinIf = Mid(Temp, Len(Sep) + 1, Len(Temp))
End If
End Function
=JoinIf($B6,Vitri!$B$5:$G$71,6,", ")
Ái chà... Bác concogia tiến bộ ghê! Viết code rất đúng thuật toánLàm tạm "zì" đi, còn gì khác tính sau
Thân
Private Function vitri(vung As Range, dk As String) As String
Dim kq As String
Dim cl As Range
For Each cl In vung
If cl = dk Then
kq = kq & ";" & " " & cl.Offset(0, 5)
End If
Next
vitri = Right(kq, Len(kq) - 2)
End Function
- Sao không là: kq = kq & "; " & cl.Offset(0, 5)==> vì tác giả muốn như thế mà, Thầy "nghía" kỹ lại xem nó có " " đấyÁi chà... Bác concogia tiến bộ ghê! Viết code rất đúng thuật toán
code của bác:
Em xin mạn phép góp ý thêm mấy chổ:PHP:Private Function vitri(vung As Range, dk As String) As String Dim kq As String Dim cl As Range For Each cl In vung If cl = dk Then kq = kq & ";" & " " & cl.Offset(0, 5) End If Next vitri = Right(kq, Len(kq) - 2) End Function
- Đoạn này: kq = kq & ";" & " " & cl.Offset(0, 5)
- Sao không là: kq = kq & "; " & cl.Offset(0, 5)
và và chi cho nhiều thế
Ngoài ra:
- cl.Offset(0, 5) là không tổng quát ---> Lở file khác không phải Offset qua 5 cột thì sao? ---> Phải có biến ColIndex để người dùng thích dịch sang mấy cột tùy ý
- Khai báo thêm biến về dấu phân cách ---> Lở người khác không thích dùng dấu chấm phẩy thì sao (ai thích cái gì tự điền vào hàm chứ không phải sửa code)
- Và từ lý do đó cũng phải sửa luôn đoạn này Right(kq, Len(kq) - 2)
thực ra với yêu cầu của tác giả và file đính kèm tôi đã giải quyết cho tác giả okcốt lõi bây giờ là bác ndu giải quyết cho bạn congkien2610 cái yêu cầu đã hỏi trước đi đã nhỉ ?
Ý em nói là vầy:- Sao không là: kq = kq & "; " & cl.Offset(0, 5)==> vì tác giả muốn như thế mà, Thầy "nghía" kỹ lại xem nó có " " đấy
Hihihi, thích thì mò mẫn học thôi, cứ mỗi lần Thầy với Thầy Ptm góp ý thì mình lại ..vỡ "za" một tý
Với lại làm đúng yêu cầu, viết mà nó ..chạy là sướng "zồi", còn nâng tầm thì phải có ...thời gian chứ, (còn dành thời gian "vài ve" nữa) phải không Thầy
Mấy hôm nay mình cũng chưa si-pam, Mod thông cảm
Bạn nói rằng:
Thế, nếu có từ 20 vị trí khác nhau, bạn dùng 20 name chắc?
Ẹc... Ẹc...
Thanks Thanksss
Cho mình xin hỏi tí nữa. Vì kiến thức eo hẹp nên các bác thông cảm.
Em muốn gán công thức đó cho một cái tên ngắn gọn thôi.
Ví dụ: Muốn dùng chức năng đó, ta chỉ cần đánh vào:
=kiem(b6)
các bác giúp em tí nữa ....thanks !!!!
Mắc cười quáCho mình xin hỏi tí nữa. Vì kiến thức eo hẹp nên các bác thông cảm.
Em muốn gán công thức đó cho một cái tên ngắn gọn thôi.
Ví dụ: Muốn dùng chức năng đó, ta chỉ cần đánh vào:
=kiem(b6)
các bác giúp em tí nữa ....thanks !!!!
Vẩn còn... hơi.. "dài"Mắc cười quá
Trừ những em bé chưa biết gì thì già trẻ nam nữ lớn bé ai cũng muốn nó ....dài ra một tí, chỉ có mình bạn là muốn nó ngắn lại, nhưng mà lỡ ngắn thì làm cho nó ngắn luôn đi chứ "kiem" cũng chưa ngắn lắm, bạn chép code này vào rồi "quánh" =k(B6)
Ngắn "zì" nó mới "hoành tráng", code này chỉ làm cho bài của bạn thôi nhé
Thân
Private Function k(dk As String) As String
Dim kq As String
Dim cl, vung As Range
Set vung = Sheets("vitri").Range("b5:b100")
For Each cl In vung
If cl = dk Then
kq = kq & "; " & cl.Offset(0, 5)
End If
Next
k = Right(kq, Len(kq) - 2)
End Function