Sau đó nhấn Ctr+Shift+Enter=OFFSET(E$3,MATCH($A16&$B16&$C16&$D16,$A$4:$A$9&$B$4:$B$9&$C$4:$C$9&$D$4:$D$9,0),0)
Tại E16 bạn nhập công thức sau
Sau đó nhấn Ctr+Shift+Enter
Bạn thử kéo xem nó cho ra kết quả là gì nha!Sau đó có thể dùng cách kéo ô E16 sang các ô khác đển copy công thức này không bạn?
Trước hết bạn hiểu $A$4:$A$9&$B $4:$B$9&$C$4:$C$9&$D$4:$D$9 là 1 mảng gồm các phần tử {A4&B4&C4&D4;A5&B5&C5&D5;...;A9&B9&C9&D9}Nhân tiện, nhờ bạn giải thích hộ dòng công thức trên đây có ý nghĩa như thế nào để mình áp dụng cho những trường hợp khác.
Cách của bạn nếu có ai đó trùng tên nhau thì sẽ không tìm được tất cả dữ liệu của những người đó.Bạn tham khảo thử xem có đúng như ý của bạn không?
Nếu có gì thì cho mình ý kiến nhe
Bạn dùng hàm SUMPRODUCT xem sao nhé!Mình có làm theo cách của bạn hoangminhtien nhưng mình đang gặp phải một vấn đề chưa xử lý được, đó là nếu như trong mảng dữ liệu xuất hiện nhiều lần một dữ liệu nào đó thì trong phần kết quả tìm kiếm và xuất ra dữ liệu tổng hợp lại không thực thi như mong muốn. Mình không hiểu nguyên nhân tại sao? Cụ thể các bạn xem file gửi kèm và giúp đỡ mình nhé.
Xin cảm ơn nhiều.
E16 =SUMPRODUCT(($A$4:$A$9&$B$4:$B$9&$C$4:$C$9&$D$4:$D$9=$A16&$B16&$C16&$D16)*(E$4:E$9))
Bạn dùng hàm SUMPRODUCT xem sao nhé!
Mã:E16 =SUMPRODUCT(($A$4:$A$9&$B$4:$B$9&$C$4:$C$9&$D$4:$D$9=$A16&$B16&$C16&$D16)*(E$4:E$9))
Công thức E3 của bạnCảm ơn bạn MinhCong. Mình còn một băn khoăn nhỏ nữa là nếu dữ liệu ở một Sheet khác với Sheet chứa kết quả tìm kiếm thì hàm SUMPRODUCT lại cho giá trị khác hoặc mình viết sai câu lệnh của hàm. Nhờ bạn chỉ giáo tiếp nhé. Mình gửi kèm file để bạn xem giúp.
Xin cảm ơn.
phải chỉnh thành=SUMPRODUCT((Sheet1!$A$4:$A$9&Sheet1!$B$4:$B$9&Sheet1!$C$4:$C$9&Sheet1!$D$4:$D$9=Sheet2!$A3&Sheet2!$B3&Sheet2!$C3&Sheet2!$D3)*(Sheet1!E$4:G$9))
=SUMPRODUCT((Sheet1!$A$4:$A$9&Sheet1!$B$4:$B$9&Sheet1!$C$4:$C$9&Sheet1!$D$4:$D$9=Sheet2!$A3&Sheet2!$B3&Sheet2!$C3&Sheet2!$D3)*(Sheet1!E$4:E$9))
Tại ô E4 của sheet2 Bạn nhập công thức sau:Chào các bạn,
Mình thấy cách dùng công thức {=OFFSET(E$3,MATCH($A16&$B16&$C16&$D16,$A$4:$A$9&$B $4:$B$9&$C$4:$C$9&$D$4:$D$9,0),0)} của bạn hoangminhtien xử lý được vấn đề không cần phải xắp xếp các cột kết quả dữ liệu ở Sheet kết quả theo thứ tự giống với Sheet dữ liệu đầu vào, nhưng lại không thực thi được khi Sheet dữ liệu đầu vào có nhiều bản ghi trùng lặp về trường đặc tính bản ghi (Tên, địa chỉ, nghề nghiệp, chức danh, ...). Cách dùng hàm SUMPRODUCT của bạn MinhCong thì bắt buộc phải xắp xếp các cột kết quả dữ liệu theo thứ tự giống với Sheet dữ liệu đầu vào, nhưng lại có thể tìm kiếm nếu như có nhiều bản ghi trùng lặp về trường đặc tính. Vậy có cách nào làm được cả hai không các bạn. Ý mình là:
- Dữ liệu đầu vào có nhiều bản ghi trùng lặp ở các trường đặc tính: Họ và tên, Lớp, Quê quán
- Các cột dữ liệu ở Sheet kết quả không xắp xếp theo thứ tự giống như ở trong Sheet dữ liệu đầu vào
Mình gửi kèm file minh họa nhé.
Xin cảm ơn các bạn giúp đỡ.
SUMPRODUCT((Sheet1!$A$4:$A$100&Sheet1!$B$4:$B$100&Sheet1!$C$4:$C$100&Sheet1!$D$4:$D$100=$A4&$B4&$C4&$D4)*(INDIRECT(ADDRESS([COLOR=Red]4[/COLOR];MATCH(E$3;Sheet1!$A$3:$J$3;0);4;1;"Sheet1")&":"&ADDRESS([COLOR=Red]100[/COLOR];MATCH(E$3;Sheet1!$A$3:$J$3;0);4;1))))
Do công thức đó là công thức mảng, khi nhập xong công thức Bạn phải kết thúc bằng tổ hợp phím Ctrl+Shift+Enterchào mọi người!
sao mình dùng công thức của anh hoangminhtien thì lại cho ra giá trị value.
Tại ô E4 của sheet2 Bạn nhập công thức sau:
Để ý số 4 và 100 trong công thức ám chỉ danh sách học sinh bắt đầu từ dòng thứ 4 và kết thúc ở dòng 100Mã:SUMPRODUCT((Sheet1!$A$4:$A$100&Sheet1!$B$4:$B$100&Sheet1!$C$4:$C$100&Sheet1!$D$4:$D$100=$A4&$B4&$C4&$D4)*(INDIRECT(ADDRESS([COLOR=red]4[/COLOR];MATCH(E$3;Sheet1!$A$3:$J$3;0);4;1;"Sheet1")&":"&ADDRESS([COLOR=red]100[/COLOR];MATCH(E$3;Sheet1!$A$3:$J$3;0);4;1))))
Đúng rồi đấy Bạn. (Những số 4 và 100 kia cũng vậy)Xin cho mình hỏi thêm:
- "Số 4 và 100 trong công thức ám chỉ danh sách học sinh bắt đầu từ dòng thứ 4 và kết thúc ở dòng 100" là trong danh sách tổng số học sinh đúng không? Hay là trong danh sách kết quả tìm kiếm.
- Trong công thức mình cũng thấy các số 4 khác nữa thì không hiểu các số 4 này có ý nghĩa gì và có phải là những số 4 kia không?
Xin cảm ơn.
Đúng rồi đấy Bạn. (Những số 4 và 100 kia cũng vậy)
Công thức của Bạn:Cảm ơn bạn.
Bạn giúp mình câu hỏi trước đó với:
"Thêm một điều mình muốn học hỏi nữa, đó là hàm SUMPRODUCT chỉ trả về kết quả là dữ liệu số, nếu là dữ liệu text thì nó sẽ báo lỗi #VALUE (mình gửi kèm file minh họa).
Vậy có hàm nào để lấy dữ liệu là text không các bạn?"
Ngoài ra, khi mình áp dụng vào công việc thì bị lỗi như sau. Mình loay hoay chưa biết làm thế nào. Nhờ các anh chị em giúp đỡ với. Mình gửi lèm file ở đây.
Cảm ơn các anh chị em nhiều.
SUMPRODUCT((Sheet1!$B$2:$B$270&Sheet1!$C$2:$C$270=$B3&$C3)*(INDIRECT(ADDRESS(2;MATCH(D$2;Sheet1![COLOR=Red]$D$1[/COLOR]:$AU$1;0);2;1;"Sheet1")&":"&ADDRESS(270;MATCH(D$2;Sheet1![COLOR=Red]$D$1[/COLOR]:$AU$1;0);2;1))))
SUMPRODUCT((Sheet1!$B$2:$B$270&Sheet1!$C$2:$C$270=$B3&$C3)*(INDIRECT(ADDRESS(2;MATCH(D$2;Sheet1![COLOR=Red]$A$1[/COLOR]:$AU$1;0);2;1;"Sheet1")&":"&ADDRESS(270;MATCH(D$2;Sheet1![COLOR=Red]$A$1[/COLOR]:$AU$1;0);2;1))))
Nói chung bài này cũng có nhiều cách lấy, nhưng với bảng dữ liệu của bạn thì hơi ......chua, trong khi chờ các cao thủ khác trợ giúp mình xin góp một cách. Trong bài mình dùng 2 name cho đỡ rối mắt trong cell chứa công thứcCảm ơn các anh chị em đã nhiệt tình giúp đỡ mình học hỏi rất nhiều.
Thêm một điều mình muốn học hỏi nữa, đó là hàm SUMPRODUCT chỉ trả về kết quả là dữ liệu số, nếu là dữ liệu text thì nó sẽ báo lỗi #VALUE (mình gửi kèm file minh họa).
Vậy có hàm nào để lấy dữ liệu là text không các bạn?
Xin cảm ơn nhiều.
Nói chung bài này cũng có nhiều cách lấy, nhưng với bảng dữ liệu của bạn thì hơi ......chua, trong khi chờ các cao thủ khác trợ giúp mình xin góp một cách. Trong bài mình dùng 2 name cho đỡ rối mắt trong cell chứa công thức
Nói chung bài này cũng có nhiều cách lấy, nhưng với bảng dữ liệu của bạn thì hơi ......chua, trong khi chờ các trợ giúp khác, mình xin góp một cách.
Option Explicit
Function THDiem(Rng As Range, Ten As String)
ReDim MDL(1 To 1, 1 To 4) As String
Dim Cls As Range, sRng As Range: Dim Rws As Long
Rws = Rng.Rows.Count
Set sRng = Rng.Find(Ten, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then _
Set Rng = Range(sRng, Rng.Cells(1, 1).Offset(Rws))
For Each Cls In Rng
If Cls.Value = Ten Then
If Cls.Offset(, 4) <> "" Then MDL(1, 3) = Cls.Offset(, 4).Value
If Cls.Offset(, 5) <> "" Then MDL(1, 1) = Cls.Offset(, 5).Value
If Cls.Offset(, 6) <> "" Then MDL(1, 4) = Cls.Offset(, 6).Value
If Cls.Offset(, 7) <> "" Then MDL(1, 2) = Cls.Offset(, 7).Value
End If
Next Cls
THDiem = MDL
End Function
Cám ơn Thầy đã quan tâm, nhưng cái này hổng phải của Cò, Cò đã giúp bạn í xử lý bằng hàm "xi ma chao" qua "meo meo" rồi (bảng dữ liệu rất lớn,em nhẩm sơ sơ phải cỡ 6.000 công thức, nhưng không thấy bạn í nói năng gì nữa, hôm nay nếu bạn í đọc được bài của Thầy chắc bạn í vui lắm)Nếu là dữ liệu của học sinh trường Nguyễn Du của 'Cò' thì xin gợi í với 'cò' hàm mảng tự tạo, như sau:
PHP:Option Explicit Function THDiem(Rng As Range, Ten As String) ReDim MDL(1 To 1, 1 To 4) As String Dim Cls As Range, sRng As Range: Dim Rws As Long Rws = Rng.Rows.Count Set sRng = Rng.Find(Ten, , xlFormulas, xlWhole) If Not sRng Is Nothing Then _ Set Rng = Range(sRng, Rng.Cells(1, 1).Offset(Rws)) For Each Cls In Rng If Cls.Value = Ten Then If Cls.Offset(, 4) <> "" Then MDL(1, 3) = Cls.Offset(, 4).Value If Cls.Offset(, 5) <> "" Then MDL(1, 1) = Cls.Offset(, 5).Value If Cls.Offset(, 6) <> "" Then MDL(1, 4) = Cls.Offset(, 6).Value If Cls.Offset(, 7) <> "" Then MDL(1, 2) = Cls.Offset(, 7).Value End If Next Cls THDiem = MDL End Function
Chúc "Cò" & các bạn vui vẻ nhân ngày nghỉ cuối tuần!