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
Chìu Thầy luôn, ngắn cỡ nào cũng chơiVẩn còn... hơi.. "dài"
- Đặt con trỏ chuột tại 1 cell
- Bấm nút chạy code ---> Ra kết quả tại ActiveCell
Vậy mới "cực ngắn"... "ngắn" đến không nhìn thây luôn (Công Công)
Chài.. ai... còn.. dài lém anh ơiChìu Thầy luôn, ngắn cỡ nào cũng chơi
Cái chữ mờ mờ chắc Mod "hổng" thấy đâu, yên tânm nhé
Hihi
Private Sub CommandButton1_Click()
Dim cl As Range
On Error Resume Next
For Each cl In Selection
cl.Value = k(cl.Offset(, -2).Value)
Next
End Sub
Dùng Code sau:Các bác làm ơn giúp đỡ lại cho em với, lần yêu trước thì 2 sheet nằm chung 1 file.
lần này thì em phải tách nó ra thành 2 file.
YÊU CẦU CHI TIẾT EM CÓ GHI TRONG FILE !
Thanks các bác nhiều !!!
Nếu các bác có giúp thì viết thẳng vào file của em gửi luôn cũng được.
Khi làm viêc thì cả 2 file đều mở
Ngàn làn cảm ơn....!!!
EM gửi lại file cho các bác nè !!!
Function TIM(CELLTIM, VUNG As Range, SOCOT As Long)
Dim rCell As Range, KQ
TIM = CVErr(xlErrNA)
For Each rCell In VUNG
If rCell = CELLTIM Then
KQ = KQ & "; " & rCell.Offset(, SOCOT - 1)
End If
Next rCell
If KQ <> "" Then
KQ = Right(KQ, Len(KQ) - 1)
TIM = KQ
End If
End Function
cám ơn bác. Em đã làm theo bác nhưng không được.dùng code sau:
Mã:function tim(celltim, vung as range, socot as long) dim rcell as range, kq tim = cverr(xlerrna) for each rcell in vung if rcell = celltim then kq = kq & "; " & rcell.offset(, socot - 1) end if next rcell if kq <> "" then kq = right(kq, len(kq) - 1) tim = kq end if end function
cell b6 của file yeucau bạn gõ
=tim(c6,vitri.xls!b$5:g$71,6)
kéo xuống là xong
Bạn xem file nhé.cám ơn bác. Em đã làm theo bác nhưng không được.
Bác có thể làm giúp em vào file rồi gửi lên đây cho em có được không bác !
Dùng vlook chỉ lấy được 1 kết quả đầu tiên nó gặp thôi bác à !
Nếu cả 2 file cùng mở thì có gì phải bàn đâu!Các bác làm ơn giúp đỡ lại cho em với, lần yêu trước thì 2 sheet nằm chung 1 file.
lần này thì em phải tách nó ra thành 2 file.
YÊU CẦU CHI TIẾT EM CÓ GHI TRONG FILE !
Thanks các bác nhiều !!!
Nếu các bác có giúp thì viết thẳng vào file của em gửi luôn cũng được.
Khi làm viêc thì cả 2 file đều mở
Ngàn làn cảm ơn....!!!
EM gửi lại file cho các bác nè !!!
Bạn xem file nhé.
Lưu ý là phải mở 2 file lên nhé.
Thanks bác nhiều !
Nếu cả 2 file cùng mở thì có gì phải bàn đâu!
Bài số #9 bạn áp dụng vào không được à?
Đây là hàm tự tạo mà, giống như Vlookup, nhưng khác là nó sẽ cho ra tất cả giá trị. bạn thử đi nhé.Sao nó cũng giống như Vlook bác à.
Nó chỉ cho ra được 1 vị trí thôi.
em muốn nó liệt kê tất cả các vị trí có code đó.
Thanks bác nhiều !
Giống VLOOKUP nhưng làm việc thì không giốngSao nó cũng giống như Vlook bác à.
Nó chỉ cho ra được 1 vị trí thôi.
em muốn nó liệt kê tất cả các vị trí có code đó.
Thanks bác nhiều !
Giống VLOOKUP nhưng làm việc thì không giống
thì dùng file tôi đã gửi cho bạn ấy , đơn giản . vì yêu cầu của bạn không ai đáp ứng được hoặc khi họ đáp ứng được thì bạn lại không hiểunói thiệt. Kiến thức ít ỏi như em thì thật lòng em cũng không hiểu thiệt .
Khó Quá !!!
thì dùng file tôi đã gửi cho bạn ấy , đơn giản . vì yêu cầu của bạn không ai đáp ứng được hoặc khi họ đáp ứng được thì bạn lại không hiểu
ạn thử lại xem nhéBác thuong ơi, File bác gửi nó lấy luôn cả cell khác để dò luôn nên nó cho ra kết quả không đúng.
Em có gửi mail lại cho bác rồi đó.
Thạnks bác !!!