Nhờ lập hàm Tìm kiếm với nhiều điều kiện (2 người xem)

Liên hệ QC

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

vnlinhtinh

Thành viên mới
Tham gia
11/4/13
Bài viết
27
Được thích
6
Điều kiện nằm ở trên các cell khác nhau trên 1 Row.
Mục tiêu gồm các cell trên ghép lại từ trái qua phải. Như ví dụ kèm theo là 4 trường hợp.
Mong mọi người lập hàm giúp.
Cảm ơn!
 

File đính kèm

File đính kèm

Chưa đúng Bác!
Bác lấy 04 cái ô điều kiện đó để tìm sao móc được đúng cái ô vàng vàng ở cột và điền vào cái ô có dấu ???(cũng vàng vàng)
Và lấy luôn vị trí của nó nữa (để vào đâu dó cũng được)
 
Xài thử đoạn mã này:
PHP:
Sub TimKienTheoNhieuDieuKien()
 Dim Rng As Range, sRng As Range, Cls As Range, Arr()
 Dim J As Long, W As Integer
 Dim MyAdd As String, MyTxt As String
 
 Set Rng = Range([G7], [G65500].End(xlUp))
 ReDim Arr(1 To Rng.Rows.Count, 1 To 3)
 [P8].Resize(Rng.Rows.Count, 3).Value = Arr()
 Arr(1, 1) = "STT":                             Arr(1, 2) = "Kêt Qua Tìm Ra:"
 Arr(1, 3) = "Dòng":                            W = 1
 For Each Cls In Range([I26], [I26].End(xlToRight))
    MyTxt = MyTxt & " " & Cls.Value
    Set sRng = Rng.Find(Trim(MyTxt), , xlFormulas, xlPart)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:                               Arr(W, 1) = W - 1
            Arr(W, 2) = MyTxt:                  Arr(W, 3) = sRng.Row
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
 Next Cls
 If W Then
    [P8].Resize(W, 3).Value = Arr()
 End If
End Sub
 
Ặc! ! ! ! o_O:spiteful:
Em mù về VBA, lắp code cũng chả biết chạy nó kiểu gì.
Bác tả giúp cách vận hành nó với!
Với lại Em muốn nó là hàm Excel vì cái yêu cầu này nó nằm trong một chuỗi các hàm logic khác.
Dùng mấy cái món: =if(vloockup(...);"";if(vloockup(.....) cũng tìm được nhưng công thức nó dài khủng khiếp. Kết hợp với một số hàm khác có khi đơ cả máy.
Nhưng cái code của bác chắc chắn là hữu dụng. Em sẽ ứng dụng được vào trường hợp khác. Bác tả cho em cách sử dụng nó.
Còn mục tiêu chính nhờ vả là xin các bác một cái hàm excel đáp ứng được đề nhu cầu!
Cảm ơn nhiều!
 
Lần chỉnh sửa cuối:
Bạn tham khảo file tại #14

(File cũ đã gỡ bỏ, thu hồi tài nguyên)
 
Lần chỉnh sửa cuối:
Hổng biết có đúng ý gia chủ chưa nữa !?
Ặc! ! ! ! o_O:spiteful:
Em mù về VBA, lắp code cũng chả biết chạy nó kiểu gì.
Bác tả giúp cách vận hành nó với!
Với lại Em muốn nó là hàm Excel vì cái yêu cầu này nó nằm trong một chuỗi các hàm logic khác.
Dùng mấy cái món: =if(vloockup(...);"";if(vloockup(.....) cũng tìm được nhưng công thức nó dài khủng khiếp. Kết hợp với một số hàm khác có khi đơ cả máy.
Cuối cùng cũng chưa biết yêu cầu như thế nào luôn.
Chắc lỗi do mình chậm hiểu sao ấy ?
 
Xin nói là: Iêu cầu của tác gia bài đăng không dễ làm bằng công thức
 
Chết thật! Khả năng trình bày của Em kém quá, mấy bác toàn hiểu sai cả :wounded1:
Tài liệu bác SA_DQ gửi còn vượt quá yêu cầu nữa!!! Em chỉ cần lấy một kết quả duy nhất, bỏ vào một chỗ duy nhất thôi
File của bác SA_DQ rất hữu ích cho nhiều nhu cầu của Em. Bác chỉnh lại giúp dùm. Cảm ơn nhiều!!!
Yêu cầu gấp bây giờ là giải quết cái đó bằng hàm excel. Các bác lập giúp Em với!!!!

Cám ơn mọi người nhiệt tình giúp đỡ!
 

File đính kèm

Xin nói là: Iêu cầu của tác gia bài đăng không dễ làm bằng công thức
Tại bác hiểu nhầm ý Em! ''''''''''''''''''
Yêu cầu đơn giản hơn bác đã gửi file nhiều! em cần lấy một giá trị duy nhất thôi!
Em đã lấy từng chữ trong ô rồi dùng index; math để tìm trong cột bằng cách các hàm if lồng nhau kiểu như:
=IF(INDEX(G8:G30;MATCH(I26;G8:G30;0))<>0;I26;IF(INDEX(G8:G30;MATCH(I26&" "&J26;G8:G30;0))<>0;I26&" "&J26);IF………......
Nhưng tìm nhiều ký tự thì công thức dài khủng khiếp. Cùng với rất nhiều công thức khác liên quan máy chạy ì ạch quá, có lúc treo luôn.
Vậy nên cần các bác chuyên gia ở đây làm cho cái công thức nhỏ gọn, tối ưu!
Bài đã được tự động gộp:

Hổng biết có đúng ý gia chủ chưa nữa !?

Cuối cùng cũng chưa biết yêu cầu như thế nào luôn.
Chắc lỗi do mình chậm hiểu sao ấy ?
Chắc tại Em truyền đạt không tốt --=0
Nhưng cái file bác gửi có kiểu nhặt chữ quá tuyệt! Em đã lãnh hội đc tuyệt chiêu này của bác :spiteful: .
Giờ có yêu cầu tương tự như thế nhưng nhặt chữ khác đi như thế này Bác xử lý giùm trong 1 công thức:
Có dòng chữ: "Kiểu nhặt chữ quá tuyệt"
Giừ bác nhặt sao cho ra 5 ô như sau:
|Kiểu|Kiểu nhặt|Kiểu nhặt chữ|Kiểu nhặt chữ quá|Kiểu nhặt chữ quá tuyệt|
 
Lần chỉnh sửa cuối:
Điều kiện nằm ở trên các cell khác nhau trên 1 Row.
Mục tiêu gồm các cell trên ghép lại từ trái qua phải. Như ví dụ kèm theo là 4 trường hợp.
Mong mọi người lập hàm giúp.
Cảm ơn!
Nếu excel chưa có hàm Textjoin thì nối tay các ô điều kiện, thử với công thức này lấy số dòng:
Mã:
=LOOKUP(1000,MATCH(MID(I26&" "&J26&" "&K26&" "&L26&" ",1,FIND("|",SUBSTITUTE(I26&" "&J26&" "&K26&" "&L26&" "," ","|",ROW($1:$4)))-1),$G$1:$G$1000,))

Có thể đặt name=I26&" "&J26&" "&K26&" "&L26&" ", công thức sẽ gọn lại phù hợp nếu có nhiều ô điều kiện công thức sẽ không bị dãn ra. Công thức như sau:
Mã:
=LOOKUP(1000,MATCH(MID(name,1,FIND("|",SUBSTITUTE(name," ","|",ROW($1:$4)))-1),$G$1:$G$1000,))
Chỗ ROW($1:$4) tương ứng với 4 ô điều kiện, muốn 5 hay 6 điều kiện hay nhiều hơn ... thì chỉnh lại ROW($1:$5) hoặc ROW($1:$6) hoặc ROW($1:$....
Nếu muốn lấy giá trị thì thêm Indirect : =Indirect("G"&LOOKUP(...))
 

File đính kèm

Lần chỉnh sửa cuối:
Thêm hàm mảng người dùng, cho những bạn cần thì tham khảo:
 

File đính kèm

Điều kiện nằm ở trên các cell khác nhau trên 1 Row.
Mục tiêu gồm các cell trên ghép lại từ trái qua phải. Như ví dụ kèm theo là 4 trường hợp.
Mong mọi người lập hàm giúp.
Cảm ơn!
Công thức
Mã:
=LOOKUP(10^6,MATCH(LEFT(I26&" "&J26&" "&K26&" "&L26,MMULT(LEN(I26:L26),--(COLUMN(A1:D4)>=ROW(A1:D4)))+COLUMN($A:$D)-1),$G$1:$G$100,))
Lưu ý:
1. Khi tăng giảm số cột thì sửa công thức tương ứng. Vd. dữ liệu tới M26 (5 cột) thì
- sửa I26&" "&J26&" "&K26&" "&L26 thành I26&" "&J26&" "&K26&" "&L26&" "&M26
- sửa I26:L26 thành I26:M26
- sửa A1:D4 thành A1:E5 (5 hàng 5 cột)
- sửa $A:$D thành $A:$E (5 cột)

2. Nếu Excel có hàm TEXTJOIN thì dùng nó thay cho nối chuỗi.

3. Nếu dữ liệu nhiều dòng thì sửa thích hợp. Vd. nếu dữ liệu có thể tới dòng 50 hoặc 1000 nhưng không bao giờ vượt quá 50 hoặc 1000 thì sửa thành $G$1:$G$50 hoặc $G$1:$G$1000
 
Rất cảm ơn mọi người đã nhiệt tình giúp đỡ.
Công thức của các bác excel_lv1.5 batman1 hay code của bác SA_DQ đều đã đáp ứng tốt yêu cầu!
Tuy nhiên Em lại làm phiền mọi người lần nữa:
-Phần cột là dữ liệu nhập, có thể nhập bị thừa khoảng trắng (Bình thường thôi, Người chứ chả phải Thánh :dirol:) và như thế công thức sẽ báo lỗi #N/A còn bên code của bác SA_DQ thì ...trắng toát. Em cần xử lý cái này (Tức là kệ nó, bao nhiêu khoảng trắng cũng được, miễn là đúng chữ, giống giống như TRIM á!)
- Nối chuỗi thủ công và đặt tên cho nó thì công thức báo lỗi #N/A.
P/s: Bác batman1 mới cho Em công thức lấy vị trí, còn công thức nhặt nguyên con chưa có. Bác cho xin nốt nhé!
 
-Phần cột là dữ liệu nhập, có thể nhập bị thừa khoảng trắng (Bình thường thôi, Người chứ chả phải Thánh :dirol:) và như thế công thức sẽ báo lỗi #N/A còn bên code của bác @SA_DQ thì ...trắng toát. Em cần xử lý cái này
Người mà không biết sửa lỗi của mình, thì là thánh chứ không fải 'Người'!
Không có kiểu vận hành CSDL vô chính fủ như vậy được?
Hoại chăng là nhập dòng trên (hay dưới) nó; Sau đó xài công thức TRIM() gì đó của bạn & chuyện này là chuyện của bạn.
 
Người mà không biết sửa lỗi của mình, thì là thánh chứ không fải 'Người'!
Không có kiểu vận hành CSDL vô chính fủ như vậy được?
Hoại chăng là nhập dòng trên (hay dưới) nó; Sau đó xài công thức TRIM() gì đó của bạn & chuyện này là chuyện của bạn.
He he! Việc bắt/sửa lỗi nhập liệu trong một chương trình là bình thường mà Bác:pardon:Em nghĩ với các Bác nó cũng dễ dàng như .... viết Code vậy! :blum:. Sự hiện diện của các ô trên cột G là cụ thể hóa và trực quan bài toán này thôi, thực tế nó lại là kết quả của nhiều quá trình khác và ... khác nữa. Và cái kết quả mong muốn kia Em lấy làm biến cho công thức khác chứ không phải hiển thị trong sheet .............. Lằng nhằng quá phải không? :stretcher:
Em muốn hỏi bác SA_DQ một chút:
- Code của bác có tác dụng ở tất cả các sheet trong file? (tại em thấy nó là module)
- Như vậy nếu muốn dùng ở nơi khác trong file thì em phải sửa những chỗ nào trong code để cập nhật các vùng điều kiện và vùng tìm kiếm để rồi gõ bất cứ chỗ nào cái =tkGPE(G8:G30;I26:L26) cung lấy được kết quả.
Em đã thử sửa lung tung nhưng đều ra kết quả như hình ở dưới đây:
Capture.PNG
 
Nếu đã có chỉ số rồi thì INDEX thôi.
Mã:
=INDEX($G$1:$G$100;LOOKUP(...);)
Vầng Em hiểu! Hy vọng là Bác có công thức lấy kết quả "nguyên con" đỉnh cao hơn nên ... hóng.''''''''''''''''''
Còn cái đặt tên cho nối chuỗi kia sao ạ?; Không có TEXTJOIN; Em copy cái I26&" "&J26&" "&K26&" "&L26&" " vào trong tham chiếu của tên, đến khi soi lại nó lại ra thế này: ="I26&"" ""&J26&"" ""&K26&"" ""&L26&"" """. Vậy phải thế nào cho công thức nó hiểu được nhỉ?
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom