Công thức dò tìm tham chiếu trong chuỗi ký tự cho trước
Chào các bác,
Mình có bài tập như sau: Bảng 1 và Bảng 2. Mình muốn dò ô A3, có chứa một trong điều kiện của D2:D14 thì kết quả trả về tương ứng với E2:E14 ở ô B3.
Mình không thể dùng Vlookup bởi vì nội dung dò khác với điều kiện nên ko ra kết quả, mà không biết sử dụng cách nào. Nhờ các bác hướng dẫn mình.
Chân thành cám ơn các bác.
5901
Hàm JoinIf hoặc JoinText sẽ giải quyết tất cả mọi yêu cầu liên quan đến nối chuỗi theo điều kiện
Xem toàn bộ code trong file
www.giaiphapexcel.com/diendan/threads/c%C3%B4ng-th%E1%BB%A9c-d%C3%B2-t%C3%ACm-tham-chi%E1%BA%BFu-trong-chu%E1%BB%97i-k%C3%BD-t%E1%BB%B1-cho-tr%C6%B0%E1%BB%9Bc.137669/
Khóa học SprinGO phù hợp
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Bạn nên sửa tiêu đề cụ thể hơn chút. Ví dụ là: "Công thức dò tìm tham chiếu trong chuỗi ký tự cho trước"
B3=LOOKUP(2;1/SEARCH($D$3:$D$14;A3);$E$3:$E$14)
Copy paste các ô còn lại bạn nhé
Giả sử A3 có giá trị = 4
Giả sử vùng từ A16:A19 có chi tiết như sau: A16=3;A17=5;A18=4;A19=10
Giả sử vùng từ B16:B19 có chi tiết như sau: B16=A;B17=B;B18=C;B19=D
Ta làm công thức:
=LOOKUP(2,1/SEARCH($A$16:$A$19,A3),$B$16:$B$19) kết quả là C
Giải thích công thức:
SEARCH($A$16:$A$19,A3) tạo ra một mảng 4 thành phần gồm {phần tử 1, phần tử 2, phần tử 3, phần tử 4}
cụ thể như sau: trong 4 phần tử (A16;A17;A18;A19) mà hàm search dò so với A3 thì có A18 = 4 có trong chuỗi của A3 = 4 (và A18 nằm ở vi trí thứ 3 trong mảng A16;A17;A18;A19) ngược lại các phần tử A16;A17;A19 vì ko khớp chuỗi nào với A3 nên kết quả là #value. '#value ở đây hiểu là lỗi tương tự như lỗi #N/A' Như vậy SEARCH($A$16:$A$19,A3) sẽ tạo ra mảng như sau:=> {#value;#value;3;#value}
Tiếp đó 1/SEARCH($A$16:$A$19,A3) tương đương với {1/#value;1/#value;1/3;1/#value} sẽ tạo ra mảng===> {#value;#value;0.333;#value}
Cuối cùng là tới hàm: LOOKUP(2,………..,………….) sẽ trả về vị trị của giá trị lớn nhất gần với 2 và bỏ qua các lỗi
tức là đi tìm vị trí của giá trị 2 trong mảng {#value;#value;0,3333;#value} . Ở đây là vị trí số 3 trong mảng
===>Từ số 3 này Lookup tiếp tục trả về dòng thứ 3 trong vùng kết quả $B$16:$B$19 ===> kết quả là B18 và = C
Ngoài cách giải thích của mình, bạn có thể tìm kiếm thêm trên GPE để biết thêm thông tin, thêm kiến thức. Chúc bạn học hỏi được nhiều kiến thức, nhiều bài học từ GPE
Ý bạn có phải là muốn hỏi hàm search có cú pháp thông thường là SEARCH(find_text,within_text,); nhưng ở trong công thức mảng nó được đổi thành SEARCH($A$16:$A$19,A3).Sự khác nhau này, thực ra mình cũng chưa có đọc được ở đâu giải thích chi tiết cả. Nhưng mình có thể ngầm hiểu với nhau sự khác nhau ở đây là SEARCH(find_text,within_text,) đơn thuần là tìm ký tự trong chuỗi ký tự, còn SEARCH($A$16:$A$19,A3) là tạo ra mảng trong công thức mảng. Vậy nhé!! Nếu bạn tìm được ở đâu cách giải thích cụ thể hơn về sự khác nhau này thì gửi Link để mình biết thêm chi tiết nhé 😉
Không có sự khác nhau khi dùng SEARCH('Mảng find_text',within_text,) và công thức thường. Nó vẫn thực thi đúng theo cấu trúc lệnh cho phép, nhưng thay vì là tìm từng lần từng 'chuỗi tìm', thì nó bê 1 lúc 'Mảng chuỗi tìm' vào công thức.
Để tìm hiểu ý nghĩa của việc này ta thực hiện: nhớ rằng trước khi gõ =SEARCH($A$16:$A$19,A3), phải chọn số dòng tương ứng ứng với phần tử Mảng trả về, Vd: chọn trước C3: C6, rồi dán C3=SEARCH($A$16:$A$19,A3) xong nhấn Ctrl+Shift+Enter, tức ý 1 ô (cell) không bao giờ chứa được 1 Mảng (là 1 tập hợp các phần tử) vào cùng 1 ô, mà nó chỉ chứa từng phần tử tương ứng của Mảng, phần tử 1 lưu vào C3, phần tử 2 lưu vào C4, phần tử 3 lưu vào C5, phần tử 4 lưu vào C6. Nếu là công thức thường thì tại C3 ta gõ: =SEARCH($A16,$A$3) xong fill xuống.
Chính nhờ sự vận dụng Mảng thay cho từng ô đơn, mà ta tạo được kết quả cũng là 1 Mảng nhằm cung cấp dữ liệu tiếp tục cho hàm Lookup(2, 'Mảng kết quả từ Search()'….) thực hiện theo yêu cầu của mình.
Thân
Bạn còn có người giải thích để tìm hiểu công thức, lúc tôi học phải tự mình tìm ra, bạn đã sướng hơn nhiều rồi! 🙂
Cứ hình dung: thay vì mở từng "hộc bàn" xem có hay không món đồ bạn cần tìm, từ hộc bàn thứ 1, xong đóng nó lại, rồi mở tiếp "hộc bàn thứ 2",…đến "hộc bàn" cuối; bạn chỉ cần mở toang các hộc bàn và nhìn vào 1 lúc, xong chỉ để các hộc bàn nào có chứa món đồ bạn cần tìm thôi. Đơn giản Mảng là vậy.
Thân
lấy tất cả? Vậy kết quả cụ thể là = bao nhiêu?
LÀM CHƠI!
Xem file và hổng hiểu gì ráo
File Excel mà bạn làm gì trong đó vậy? Sao giống vẽ bùa quá
Thì chắc là vầy:
Bấm Ctrl + Shift + Enter nhé
Vầy mới đúng:
Bị nó là công thức mảng
Giải pháp thì đã có người làm rồi. Ở đây xin lưu ý:
– Nếu muốn nối chuỗi và có loại bỏ trùng thì dùng JoinIF
– Nếu muốn nối chuỗi và lấy toàn bộ thì dùng JoinText
Cháu sử dụng công thức mảng sau:
=JoinText(",",IF(G17:H20=F16,IF(G22:H25=F21,IF(G27:H30=F26,G32:H35,1/0),1/0),1/0))
Cháu nhớ kết thúc bằng Ctrl+Shift+Enter.
=JoinText("; ",IF((G17:H20=$F$16)*(G22:H25=$F$21)*(G27:H30=$F$26),G32:H35,1/0))
Bạn nhìn kỹ đi, đó là hàm JOINTEXT chứ hổng phải JOINIF
Tôi viết 2 hàm này có mục đích sử dụng khác nhau đấy
————————-
Mảng đương nhiên là chậm nhưng chúng ta dùng Excel để tính toán là chính đúng không? Vậy không lý nào dùng Excel để nối chuỗi đến vài chục ngàn dòng rồi lại than chậm với nhanh
Câu lệnh quá dài, phải cắt bớt mới được:
Ah. Sao bạn sửa tên hàm của tôi vậy? Tôi không thích đâu nha. Nói chung của tôi sao cứ để y vậy giùm. Nếu không thích thì đừng xài
Hy vọng bạn để y tên hàm JoinText cho tôi. Cảm ơn!
Bạn thử công thức này nha
=LOOKUP(2,1/SEARCH(E2,$B$2:$B$3),$A$2:$A$3)