Các câu hỏi về lọc dữ liệu, lọc với nhiều điều kiện
Các bạn giúp mình 2 bài toán tìm kiếm và lọc các dữ liệu ,vui lòng mở file đính kèm
Một giải pháp cho những ai yêu thích Name
Về phần trích lọc danh sách duy nhất thì trên diển đàn có nói nhiều rồi, tôi chỉ muốn góp phần bài toán trích theo điều kiện (Trần thị)
Đặt 2 name là đủ:listA = $A$3:$A$12 VT =IF(ISERR(SEARCH($E$1,listA)),"",ROW(INDIRECT("1:"&ROWS(listA))))Và cuối cùng có công thức:
C3 =IF(ROW(1:1)>COUNT(VT),"",INDEX(listA,SMALL(VT,ROW(1:1)),1))Kéo fill xuống!
Bạn hoangdanh282vn chú ý: Cẩn thận với hàm INDIRECT vì ko phải khi nào cũng cho kết quả đúng… Bạn hãy thử kéo vùng listA ra khỏi cột A thì sẽ biết liền.. Kết quả sai ngay lập tức
ANH TUẤN
Khóa học SprinGO phù hợp
Thiết kế Tổng đãi ngộ (Total Rewards) theo khung SHRM
Khóa học “Thiết kế Tổng phần thưởng (Total Reward) chuẩn khung SHRM” giúp bạn nắm vững toàn bộ hệ thống đãi ngộ theo chuẩn...
Xem khóa học
Bạn chọn ô A1 rồi vào DataFilterAdvanced Filter… (nhớ check vào ô Unique records only nhé)
1461
Chú ý: với File của bạn dữ liệu có 357 dòng
+ Nếu Loại bỏ TÊN VẬT TƯ trùng nhau, chỉ lấy duy nhất một cột TÊN VẬT TƯ thì trong ô List range bạn để $B$2:$B$359 (sẽ được 190 TÊN VẬT TƯ không trùng nhau)
Nhưng như vậy thì mình thấy: Bật sắt ĐK 10 chỗ thì ĐV là Mét, chỗ thì ĐV lại là cái (ĐV khác nhau)
và còn nhiều TÊN VẬT TƯ khác cũng có ĐV khác nhau (Băng tan; Bu lông M20x80; Cầu chắn rác; ,,,)
+ Nếu bạn muốn giữ lại các TÊN VẬT TƯ trùng nhau nhưng ĐV khác nhau thì trong ô List range bạn để $B$2:$C$359 (sẽ được 225 TÊN VẬT TƯ và ĐV không trùng nhau)
File của bạn đây: Nhấn nút ở Sheets("Data")
Kết quả lọc duy nhất được đưa sang Sheets("Loc").
Những dòng trùng bị loại bỏ được đưa sang Sheets("Temp")
Tập tin đính kèm dùng cho Excel 2003
[URL="https://www.giaiphapexcel.com/forum/attachment.php?attachmentid=51261&d=1282912572"%5DLoc du lieu boyxin.rar (48.3 KB)
Mọi người kiểm tra giúp xem thực hư thế nào: Tui test cả trăm lần vẫn ngon lành thế mà hehe82 test nó lại ra VBA
@hehe82: Bạn nhấn nút nó ra cái gì, đưa lên xem nào? (bạn đã chỉnh ToolsMacroSecurity… về Low chưa vậy?)
Bằng tay không được chứ dùng code thì OK
Sub Test()
With Sheet1.Range("A6:I100")
.AutoFilter 5, ">25"
.AutoFilter 8, ">25"
.AutoFilter 9, ">95"
End With
End Sub
AutoFilter ra kết quả rồi, muốn copy đi đâu nữa là việc của bạn
Từ Cell A8 trở xuống bạn chú thích như thế là sao? vẫn nhập số liệu khác _ chưa hiểu, giải thích giúp nhé . Bạn muốn dùng công thức hay Vba?
Bạn dùng macro sự kiện như vầy ơ trang nhập liệu:
Hãy thử nhập nguyên 1 dòng vô trang tính nhập (với số 0 cuối, tất nhên!)
(Macro cũng ở trang tính đó luôn)
RightClick vào sheet "DU TOAN" ==> chép code này vào ==> nhập MH vào cột A ==> Enter ==> xem kết quả
Chưa ưng ý lắm, mình làm thử cho bạn nhập từ A5 ==> A100 thôi nhé, có gì tính sau
Thân
Thú thật với bạn, bài này tới đây thì mình cũng "tèo" luôn rồi, dùng sự kiện trong sheet bực mình quá, tam thời mình làm thế này:
-Từ A1 ==> A100 ở sheet "DU TOAN" bạn chọn bất cứ cell nào thì "nó" cũng tạo cho bạn một "thằng" validation, bạn chọn mã trong validation này ==> Enter ==> xem kết quả.(Trong sheet DLDV dữ liệu đến đâu thì kéo công thức tới đó, đừng kéo dư)
Nếu thích thì làm còn không thì (nói như phim HongKong) coi như mình chưa làm gì hết
Híc, trong file có quá trời name rác, hèn chi dung lượng "chà bá" luôn
Thân
dùng vlookup là được, tuy nhiên cần có file mẫu thì sẽ được chính xác hơn, không nên hỏi chung chung như thế.
Vậy thì bạn đừng copy từng tên mà copy tất cả sang là được chứ sao?
Nói vậy thôi, bây giờ bạn mở cả 2 file lên, tại file 1, bạn sử dụng VLOOKUP để lấy thông tin từ file 2 sang. Sau đó copy vùng kết quả thu được và dán giá trị lại vào chính vùng đó.
đại khái gần giống như thế này
xem file nhé
Đây là file của bạn. Mình đã nhập công thức vào trong file, tuy nhiên dữ liệu ở bảng tra nhập không đầy đủ nên có những trường hợp không cho ra kết quả.
Ý bạn thế này phải không?
Mở file đính kèm dưới đây, AutoFilter cột G sẽ thấy!
Cách làm của tôi là:
– Đặt name
p =Sheet1!$G$7:$G$21Công thức tại D4
=IF(COUNTA(p)=SUBTOTAL(3,p),"All",INDEX(p,MATCH(1,(SUBTOTAL(3,OFFSET(p,ROW(INDIRECT("1:"&ROWS(p)))-1,,1))),0)))Công thức mảng nha!
Ghi chú:
– Nếu cột STT là liên tục thì ta có thể tận dụng nó khiến công thức sẽ ngắn hơn rất nhiều và không cần đến mảng
– Ngoài ra, nếu cột G có cell rổng và ta filter cột G theo điều kiện Blanks thì công thức phải sửa lại đôi chút
Nằm trong menu InsertNameDefine đấy bạn!
Ở bài này, chẳng qua đặt name cho gọn công thức thôi, nếu để nguyên, khỏi đặt name thì công thức sẽ thế này
=IF(COUNTA($G$7:$G$21)=SUBTOTAL(3,$G$7:$G$21),"All",INDEX($G$7:$G$21,MATCH(1,(SUBTOTAL(3,OFFSET($G$7:$G$21,ROW(INDIRECT("1:"&ROWS($G$7:$G$21)))-1,,1))),0)))Tức chổ nào có chữ p thì tương đương với $G$7:$G$21
————————-
Giờ để tôi làm lại bài này ở cấp độ đơn giản nhất (có 1 cột phụ) cho bạn dễ hình dung nha —> Xem file
Dùng 2 Name cho công thức gọn một chút.
Kết quả ô E4 của sheet1 chẳng biết lấy a nào, a của sheet1 hay a của sheet2?
Code thay cho công thức của bài #2 đây:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim nN, iI, zZ As Double
Dim Shs As Worksheet
Set Shs = Sheets("sheet2")
If Not Intersect(Target, ) Is Nothing Then
nN = Application.WorksheetFunction.Match(, Shs.Range(Shs., Shs..End(xlUp)), 1)
If Range("B2") – Shs.Range("A" & nN + 1) <= Shs.Range("A" & nN + 2) – Then
iI = nN
Else
iI = nN + 1
End If
zz = Shs.Range("A" & iI + 1)
= Shs..Offset(iI, 1)
= Shs..Offset(iI, 2)
= *
= *
= zZ *
End If
Set Shs = Nothing
End Sub
Muốn VBA thì tặng bạn VBA đây, dữ liệu ở cột A Sheet2 phải được sắp xếp như trong bài
Right Click vào Sheet1 ==> View Code ==> chép cái này vào ==> nhập dữ liệu ở B2 ==> xem kết quả
Thật ra bài này còn mấy chỗ chưa rõ:
1 – Nếu giá trị ở B2 = 5 ==> nằm giữa cách đều A7 & A8 ở Sheet2 thì lấy giá trị nào??? ( Trong bài mình lấy giá trị gần & nhỏ hơn )
2 – Nếu giá trị ở B2 nằm ngoài vùng giá trị A2:A12 ở Sheet2 thì sao??? (Trong bài nếu giá trị B2 nhỏ hơn Min(Sheet2!A2:A12) thì lấy giá trị đầu (A2), ngược lại nếu B2> Max(Sheet2!A2:A12) mình lấy giá trị cuối (A12)
Có gì chưa trúng ý thì ….la lên nhé
Thân
Bạn bấm Alt +F11 ở đoạn cuối trong code
Chỗ .Resize(mM,3) = Mg
Bạn sửa thành
Sheets("Sheet2").[cell muốn gán kết quả].Resize(mM,3) = Mg
Không dùng ÀutoFilter được thì dùng Advanced Filter… Có điều sau khi xem xong tôi cũng chưa hiểu ý bạn —> Cụ thể bạn muốn lọc cái gì? Kết quả lọc đặt ở đâu?
Hướng dẫn bạn làm bài này bằng Advanced Filter
– Gõ trị cần tìm vào cột E (ví dụ E1 gõ 45;8 và E2 gõ 58'01… vân vân…)
– Gõ công thức này vào cell C2: =COUNTIF($E$1:$E$100,$A2)>0
– Gọi lệnh Advanced Filter và chọn các vùng như hình:
1476
– Bấm OK là có kết quả ngay
Bạn tham khảo File đính kèm nhé, có gì trao đổi lại với mình.
Bài này đưa vào box [URL="https://www.giaiphapexcel.com/forum/forumdisplay.php?79-L%E1%BA%ADp-Tr%C3%ACnh-v%E1%BB%9Bi-Excel"%5DLập trình với Excel có vẻ hợp lý hơn đấy nhỉ (hy vọng MOD, SMOD sẽ chuyển về đúng Box).
Mình làm như sau:
1. Tạo vùng điều kiện lọc để lấy năm như ở I1:I2.
2. Sử dụng code sau cho sheet Loc để lọc năm:
Private Sub Worksheet_Activate()
Sheet1..AdvancedFilter xlFilterCopy, , , True
End Sub3. Đặt 1 Name Nam=OFFSET(Loc!$J$2,,,COUNTA(Loc!$J:$J)-1,) để tạo Source cho Validation tại ô A2
4. Tạo vùng điều kiện lọc dữ liệu như ở H1:H2
5. Sử dụng code sau để lọc dữ liệu:
Sub LocDL()
Sheet2..Clear
Sheet1..CurrentRegion.AdvancedFilter xlFilterCopy, Sheet2., Sheet2.
End Sub
Theo mình thì cũng không cần phải sửa code là gì (tất nhiên là tùy tình hình thực tế). Nếu thêm điều kiện lọc thì bạn sửa lại công thức tại ô H2 (ở bước 4 của bài trên) cho phù hợp là được.
Công thức ở sheet2:
Công thức ở sheet2:
Kết thúc bằng Ctrl + Shift + Enter
Kéo xuống
Số xe bên sheet 2 phải chắc chắn có trong sheet 1 chứ bạn, nếu không…nó dò bậy ráng chịu. Híc
Thân
Góp thêm 1 cách dùng mảng cho thêm phần nặng nề:
KM:
Ngày:
Cả 2 công thức kết thúc bằng Ctrl-Shift-Enter
Xem file đính kèm nhé!!!!
Có phải bạn muốn sắp xếp tất cả tải trọng với Max và Min của M3 không?
Bạn nghiên cứu các hàm tham chiếu: VLOOKUP, HLOOKUP,MATCH; hàm IF…
Tất cả các vấn đề của bạn, đối với Excel chỉ là "muỗi".
Nếu cần trợ giúp, gửi file ví dụ lên nhé.
Xem 2 file đính kèm nhé. Trong công thức VLOOKUP nếu bị lỗi thì kiểm tra lại tên file/đường dẫn có đúng chưa nhé
Gửi bác dongducnhiem@ :
Bác sửa công thức name dl thành :
=OFFSET('du lieu'!$A$2:$G$2,,,COUNTA('du lieu'!$A$2:$A$24),)
Vì trong công thức của Volga dữ liệu cột A là dạng number (date cũng là dạng number) nên Volga dùng Count để đếm, còn dữ liệu của bác là text nên bác phải dùng COUNTA để đếm –> Tổnh quát nên dùng COUNTA nếu dữ liệu cột A liên tục.
Cái này em chưa hiểu lắm, hiện tại cột A bên sheet dữ liệu đang là cột lấy điều kiện nếu bỏ dữ liệu cột A thì sẽ không có kết quả bên sheet kiểm tra –> Hiển nhiên rồi mà bác! Bác có ý kiến gì khác chăng?
Lấy dữ liệu cột B để tham chiếu theo điều kiện thì bác name vt thành :
=IF(OFFSET(dl,,1,,1)='Kiem Tra'!$A$1,ROW(INDIRECT("1:"&ROWS(dl))),"")
Lấy Cột C,D,E.. thì bác sửa chỗ 1 thành 2,3,4…Bản chất chính là tham sô dịch chuyển cột (tham số thứ 3) trong hàm Offset của name dl bác ạ.
Bác có thể tham khảo cách sử dụng của hàm Offset trên diễn đàn để ứng dụng linh hoạt hơn!
Thanks!
Bạn muốn kết quả lọc ra đặt ở đâu? Bạn làm tay thử 1 công việc xem sao?
Vả quá, đoán mò làm đại đỡ buồn.
Mình lọc thấy bình thường mà. Híc
Thân
Đây chỉ là một cách, còn tối ưu hay tối thui hay tối….gì đó thì mình hổng có biết
Không dùng "Đít-to" ( mấy hôm nay em í làm mình phát ớn tới cổ rồi), dùng mảng để lọc & sắp xếp luôn
Hình như đáp án của bạn nhập vào hơi….trật (vì còn trùng "Tiểu mục" 6549_ nếu đúng vậy thì bài giải mới đúng,còn không bài của mình "tèo" luôn)
Thân
Bạn xem file xem đúng ý bạn chưa nhé:
Bạn xem file đính kèm
1.Hàm tên là GPE, Trong đó tham số thứ nhất là vùng dữ liệu chứa điều kiện lọc, tham số thứ hai là điều kiện lọc, Tham số thứ nhất chỉ chọn trên 1 cột. Vùng dữ liệu theo file là cột D.
2.Bài làm đã thỏa mãn mục đích của bạn, giờ bạn thử thêm dữ liệu vào cột C, D và nhập số vào cột G, xem kết quả ở cột H.
3. Bạn seảrch cụm từ: Các hàm tự tạo cho Worksheet tại diễn đàn GPE, bạn sẽ hiểu hơn các hàm như thế này.
Bạn ơi, nếu như giá trị là 1 có 3 kiểu như vầy:
1 – Mục ABC
1 – Mục ABC
1 – Mục ABC, Mục DEF
thế thì khi thông qua hàm thì sẽ lọc như thế nào?
a) Nếu có trùng mục thì loại trừ, như vậy thì kết quả hàm sẽ là: Mục ABC, Mục DEF
b) Lấy tất cả những gì mà giá trị 1 có, kết quả sẽ là: Mục ABC & Mục ABC & Mục ABC, Mục DEF
Tạm thời tôi thiết kế cho bạn nếu mục nào bị trùng hoàn toàn thì sẽ không gộp lại, còn không thì sẽ "gom về một mối"
Hàm GomDuLieu:
Cách dùng:
=GomDuLieu(Giá trị tìm kiếm, Bảng tham chiếu, Số cột tham chiếu)
(gần giống hoặc na ná như dùng hàm VLOOKUP, nhưng ngược với hàm VLOOKUP thay vì cột đầu trong bảng chứa điều kiện dò tìm, thì cột đầu ở đây lại là cột chứa giá trị kết quả, còn số cột tham chiếu chính là cột chứa điều kiện cần tìm).
Xem file để biết thêm chi tiết nhé.
============================================
To: Xuân Nguyễn: Tốt lắm, trong thời gian qua rất tiến bộ đấy!
Có lúc cũng không biết "ba lơn" hay "bốn lơn", nhưng đôi khi dữ dài "vằng vặc" khiến người ta quên rằng đã từng nhập vào rồi, song lại nhập tiếp, hoặc mục này nối tiếp mục kia (kiểu trắc nghiệm), nên không thể kiểm soát hết được, ta lập trình thì phải lường trước các kiểu dữ liệu để làm kiểu tổng quát, đừng như cái mà Nhà nước ta đang làm là "sai đâu sửa đó", sẽ vừa mất thời gian, vừa lãng phí công sức và tiền của của nhân dân, thế mới gọi là có "tầm" được, chứ đừng để người ta nói mình cũng có "tầm", nhưng là "tầm bậy" thì ẹc … ẹc …
Riêng sao mình chẳng thích cách mà các tác giả "quăng" lên câu hỏi xong rồi phó mặc người hướng dẫn muốn làm gì thì làm, chẳng có một chính kiến nào phản hồi để làm tiếp hay không.
Bạn xem file, có dùng macro
(*) Không chọn, ex. nó hiếu là không lọc; Có nghĩa là lấy tất cả (Trường hợp tại )
Còn trường hợp sau thì trong danh sách đó có loại hóa đơn đó thì nó lọc; Máy mà!
Còn muốn khác thì thêm vài dòng lệnh như sau:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Set Rng = .CurrentRegion
If Not Intersect(Target, ) Is Nothing Then
Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"H1:H2"), CopyToRange:=Range("G4:K4"), Unique:=False
ElseIf Not Intersect(Target, ) Is Nothing Then
If .Value = "" Then '<=|'
.CurrentRegion.Offset(1).Clear: Exit Sub
End If '<=|'
Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"H1:I2"), CopyToRange:=Range("G4:K4"), Unique:=False
End If
End Sub
Ở bài trên, trong cde không có để bạn sửa thành , mà chỉ có ; Lúc í cần sửa thành
Ở bài dưới: Nếu thêm điều kiện lọc, thì thêm bên fải vùng chuẩn để lọc bây chừ là tiện hơn;
Bạn thêm ô đầu cột tên trường [Khách hàng] & ô dưới ngay ô này là điều kiện để lọc trường tna2y
Những mong hữu ích cho bạn!
File nào vậy bạn; Làm ơn bỏ bớt 1 file đi, như vậy bạn sẽ thu hồi được 1 ít tài nguyên nữa kia đấy!
Bạn xem & đối chiếu giữa 3 trường hợp
Để tháo file đã tải thì tại CS "Tải file từ mày", nếu ta đã đưa file trước đó thì đâu đó trên CS này sẽ có nút "Remove"
để bạn tìm cách ấn vô nó. (& làm việc này chỉ có sướng trở lên mà thôi!)
KHông biết lọc ra đâu, phần giải thích yêu cầu hơi bị khó hiểu.
Thử chạy code trong file này coi sao
1/ Chẳng có "dấu hiệu" gì ở cột O để "bắt" Excel biết để tô màu các dòng theo yêu cầu.
2/ Thêm cột ĐV thì được.
Bạn chỉ dấu hiệu nào nhận biết để tô đậm, canh giữa đi.
Tô màu là đủ phân biệt rồi.
Biết phải nói sao đây, xem ghi chú trong các dòng code đi.
Copy thành 1 file khác rồi cứ "vọc banh chành", quan sát sự thay đổi kết quả, hay gì gì đó, từ từ sẽ "thấm" mà.
Khi bị lỗi mà không biết vì sao thì đóng file, không Save, mở lại, làm lại kiểu khác.
Híc! Tui cũng phải "mò mẫm, sờ sẫm, rờ rẫm" kiểu như vậy thôi, không có trường lớp nào cả.
Làm theo chỗ nào vậy?
Sub DS_SV()
Dim I As Long, J As Long, K As Long, sArr(), dArr(1 To 1000, 1 To 7), Lop As String, Ws As Worksheet
Lop = Sheets("DS_SV")..Value
For Each Ws In Worksheets
If Ws.Name Like "P_*" Then
sArr = Ws.Range(Ws., Ws..End(xlUp)).Resize(, 7).Value
For I = 1 To UBound(sArr, 1)
If sArr(I, 7) = Lop Then
K = K + 1
dArr(K, 1) = K
For J = 2 To 7
dArr(K, J) = sArr(I, J)
Next J
End If
Next I
End If
Next Ws
With Sheets("DS_SV")
..Resize(1000, 7).ClearContents
..Resize(1000, 13).Borders.LineStyle = xlNone
..Resize(K, 7).Value = dArr
..Resize(K, 13).Borders.LineStyle = xlContinuous
..Resize(K, 13).Borders(xlInsideHorizontal).Weight = xlHairline
End With
End Sub
Nhìn thấy mấy chỗ này, còn gì nữa thì chưa biết
Thử thêm cái này đi coi thế nào
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address = "$G$10" Then
Dim sh As Worksheet, Rng As Range
.ClearContents
For Each sh In Worksheets
If sh.Name <> "DS_SV" Then
sh.ShowAllData
Set Rng = sh..CurrentRegion
Rng.AutoFilter 7, Target
Rng.Offset(1).Copy .End(3).Offset(1, -6)
End If
Next
Range("A11", .End(3)) = [row(a:a)]
End If
End Sub
Dùng AutoFilter cũng giống như đang làm thủ công vậy đó. Filter xong rồi cọp rồi dán. Chỉ có điều là mình bắt code làm thôi. Dữ liệu ít thì cách này coi như xài được. Nếu nhiều phải dùng mảng cho chắc ăn.
Nói chung là người xài phải biết lúc nào xài dao nhỏ, lúc nào xài dao phay hoặc búa rìu
For J = 8 To UBound(sArr, 2)
If sArr(I, J) > 0 Then Num = Num + sArr(I, J)
Next J
Sau khi kết thúc For J thì Num đã cộng luôn cột AL vào rồi.
Dòng dưới chỉ cần:
If Num > 0 Then Arr2(I, 1) = sArr(I, 1) – Num
If Num > 0 Then Arr2(I, 1) = sArr(I, 1) – (sArr(I, 35) + Num)
Trừ thêm sArr(I,35) – tức cột AL – 1 lần nữa nên ra số âm là phải rồi.
Đưa file từ đầu thì có kết quả lâu rồi.
Public Sub LOC()
Dim Sarr(), dArr(), i As Long, k As Long, TMP As String
With Sheet1
Sarr = .Range(., ..End(xlUp)).Resize(, 6).Value2
End With
ReDim dArr(1 To UBound(Sarr, 1), 1 To 6)
With Sheet1
TMP = UCase(.)
For i = 1 To UBound(Sarr, 1)
If UCase(Sarr(i, 2)) Like "*" & TMP & "*" Then
k = k + 1
For j = 1 To 6
dArr(k, j) = Sarr(i, j)
Next
End If
Next i
..ClearContents
If k Then
..Resize(k, 6) = dArr
..Resize(k, 5).Sort key1:=.
..NumberFormat = "#,##0"
End If
End With
End Sub
Alt+F11, chép code trên vào :Insert/ Module
Alt+F11, chép đoạn dưới vào chính sheet1 (kích đúp vào sheet1)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then LOC
End Sub
Xem tạm như file được chưa?–=0–=0–=0–=0–=0
Nút Macro đó là Add CommandButton
Muốn xem lệnh thì ấn Alt + F11 ra xem,
Khi chọn mã khách hàng ở ô màu vàng, thì click vào cái nút đó để nó show ra các dòng có dữ liệu nha.
Cái đó chỉ hide mấy dòng dữ liệu = 0, thôi. không muốn show thì cọn chả đoạn dòng đó Unhide thì ra bình thường.
Sửa lại công thức cột số lượng thành:
Nhớ dấu ; hay dấu , trong công thức là tùy máy bạn. máy tôi dấu ; –=0–=0–=0–=0–=0–=0
Đối với bài toán lọc nâng cao, quan trọng nhất bạn phải hiểu được cấu trúc TRUE/FALSE
Đối với bài toán của bạn tôi làm như sau:
1. Tại Cell O2, tôi dùng công thức điều kiện: =AND($C5>=$O$6,$C5<=$P$6,$G5=$Q$6)
2. Dùng công cụ Advanced Filter với các tham chiếu như sau:
– Chọn Copy to another location
– List range: $C$4:$M$48
– Criteria range: $O$1:$O$2
– Copy to: $S$4:$AC$4 (Bạn có thể lấy các trường dữ liệu tùy ý)
Chúc bạn thành công!
Một cách dùng cột phụ
Chỉ có thể giúp bạn tách dữ lieu từ sheet tổng hợp ra các sheet khác theo từng quận (dulieu cột k)
còn làm theo mẫu thì nói that tôi không hiểu quy tắc file của bạn nên ko giúp được bạn tự làm them nhé
Bạn kt xem thế nào (VBA: mau(1)).
Mình nghĩ nếu số kho ko quá nhiều thì nên làm thủ công 1 chút, ở đây có thể lợi dụng pivot (mau.xlsx)
1/ Bạn copy cột C,D sang cột I,J, Dùng Remove Duplicates sẽ có được các cột I+J không trùng.
2/ Dùng SumIfs() để tính SL các cột Nhập, Xuất, Tồn như trong file.
–> Không đụng gì đến cột A–> F.
Tôi chỉ dùng Filter để kiểm tra kết quả thôi.
Bạn vào Data, bấm nút Filter 1 lần nữa là xong.
Làm bỡi macro đó nha!
Tôi dùng cột phụ bạn xem file nhé
Có chứ. Ko dùng cột phụ thì đặt name. Nhưng cột phụ mình để ngoài khu vực in và nhìn thì có ảnh hưởng gì đâu
Không phụ cũng được nhưng sẽ nặng File đấy.
Bạn dùng công thức mảng sau, kết thúc Ctrl + Shift + Enter sau đó thay phần đỏ đỏ bằng cột tương ứng bên sheet nguồn nhé
Mình góp vui một công thức nửa nhé. Để cho nhẹ mình sửa chút đỉnh trong sheet Thong tin tim kiem. Bạn xem file đúng ý không?
Mình sửa phần tiêu đề của các cột cho giống với sheet dữ liệu gốc. Còn muốn không hiển thị số 0 thì kết hợp với hàm if là ra rồi bạn, hoặc định dạng để không cho hiển thị số 0.
Sử dụng chiêu học được của bạn GiaiPhap, cám ơn bạn GiaiPhap
tạo thêm list của ô mã số
Viết ngắn gọn thì như này:
P/s: tôi thấy trong file đã có code, thế bạn muốn trợ giúp cái gì nữa???
B thử thử thách ct này:
F4=SUMPRODUCT(IFERROR(1/COUNTIFS($B$3:$B$23,E4,$A$3:$A$23,$A$3:$A$23),0)*($B$3:$B$23=E4))
Công thức mảng bạn nhé, bạn có thể thay sumproduct bằng sum.
Nếu 50k dòng thì dùng code cho nhẹ bạn.
Bạn check file nhé, tốc độ thì khỏi phải nói nhé, trong vòng chưa đầy 1s.
Bạn check lại file xem tn, chứ code chỉ đếm khi cả 2 cột có dữ liêu.(tức là k đếm khi 1 trong 2 cột k có dữ liệu hoặc cả 2 k có dữ liệu)
Bạn check lại file nhé.
Ko ngờ dữ liệu của bạn lớn thế, thế thì sửa lại thế này
thử làm với Dictionary
Cám ơn bạn Ndu96081631, biết thêm một kinh nghiệm, mong học thêm nhiều từ bạn
bạn chạy thử code
file bạn gởi lên mình chạy bình thường, kết quả trong Sheet TongHopVT
file bạn gởi không có sheet TongHop nên mình mới tạo Sheet TongHopVT
nếu muốn tên sheet là TongHop thì bạn xóa sheet TongHopVT, và trong code bạn sửa tất cả từ TongHopVT thành TongHop (dùng Edit và replace all)
Bạn xem đúng ý mình chưa nhé.
Chào _0gaX,
File của anh giaiphap gửi là tuyệt rồi!
Còn nếu bạn muốn công thức!! có luôn, vừa mới thọ giáo của leoheocon và khuongvietphong nên đem gả luôn 🙂
Bạn xem file đính kèm nha.
Lưu ý: Công thức chỉ áp dụng nếu bạn đang sử dụng Excel >=2007
Chúc bạn ngày vui /-*+//-*+//-*+/
Chào _0gaX,
Nếu bạn vẫn muốn sử dụng MID() và FIND() để cắt số, thì anh giaiphap đã có đưa ra bên cột B từ hàng 8 trở xuống, cụ thể công thức đang có là:
Bạn có thể copy rồi dán từ B1:B7.
Nay tôi bổ sung cho cột C với 13 ký tự, dùng công thức bằng MID() và FIND() luôn /-*+/, với điều kiện chỉ tìm được ba đầu số: "61, 69, 89", nếu có đầu số khác, thì bạn phải tự thêm vào công thức, cụ thể:
Ctrl+Shift+Enter rồi fill xuống.
Lưu ý: các đầu số có khoảng trắng nha, ví dụ: " 69" hoặc " 89"
Chúc bạn ngày vui
Chào ngocha3508,
Đứng tại ô D2, vào Conditional FormattingNew Rule…Use a formula to determine which cells to format,
vào vùng trắng dưới chữ "Format values where this formula is true:", nhập công thức:
Nhấn nút "Format…" bên phải dưới định dạng màu Font (vd: đỏ) và Fill (vd: màu cam sáng) theo ý bạn, nhấn OK, rồi OK thoát ra, điền Applies to: =$D$2:$D$100, nhấn Apply rồi OK là xong.
Bạn sẽ thấy những dữ liệu nào bên D được tìm thấy có bên các cột A,B,C sẽ tự động chuyển màu.
Chúc bạn ngày vui
Bạn đặt hàm không sai nhưng mình nghĩ chắc do kí tự nhập vào không đúng dữ liệu dò kết quả nên gây ra lỗi #NA đó. Mình đang dùng điện thoại có gì tối không ai giúp, mình giúp cho bạn.
file bạn đây!
bạn thử đánh một tên vào xem nhé!
File bạn mình xoá dữ liệu nhập tay dữ liệu vào đó.
=SUMPRODUCT(('Nhap PO'!$C$6:$C$17='Yêu cầu'!C5)*DAY('Nhap PO'!$E$3:$AI$3='Yêu cầu'!C3),'Nhap PO'!$E$6:$AI$17)
Dạ được Anh!
p/s: em lỡ giúp rôì sao Anh? lEm cảm ơn Anh,lần sau em sẽ chú ý hơn.
chúc Anh ngày vui!
VLOOKUP(C5,'Nhap PO'!$C$6:$AI$17,MATCH('Yêu cầu'!C3,'Nhap PO'!$E$3:$AI$3,0)+2,0)
em làm như vậy đó Anh, Anh xem giúp đã đúng ý chưa?
Chúc Anh ngày vui!
HLOOKUP(C3,'Nhap PO'!$E$3:$AI$17,MATCH('Yêu cầu'!C5,'Nhap PO'!$C$6:$C$17,0)+3,0)
em chĩ nghỉ ra như vậy thôi Anh?
Anh xem có thể dùng hàm hlookup theo cách khác được không Anh?
Bạn xem file thử
Sao mình viết sai lỗi chính tả nhiều vậy?
Bạn thử code sau xem đúng ý không ạ?
Bạn nên chuẩn hóa dữ liệu
Công thức
Xem file đúng không nhé
Mình có sử dụng code của thầy @ndu96081631
Viết hàm mảng tự tạo cũng được;:
Function LKe(Rng As Range, TuNgay As Date, DenNgay As Date, Ten As String)
ReDim Arr(1 To Rng.Rows.Count, 1 To 3) As String
Dim W As Integer, J As Long
For J = 1 To Rng.Rows.Count
If Rng.Cells(J, "A").Value = Ten And (Rng.Cells(J, "B").Value >= TuNgay And Rng.Cells(J, "B").Value <= DenNgay) Then
W = W + 1
Arr(W, 2) = Rng.Cells(J, "C").Value
Arr(W, 1) = Rng.Cells(J, "B").Value
Arr(W, 3) = Rng.Cells(J, "D").Value
End If
Next J
LKe = Arr()
End Function
Muốn đạt iêu cầu bổ sung này, thì ta cần thay đổi công đoạn:
Thay vì duyệt theo dòng trên cột 'A', ta duyệt theo ngày từ thấp đến cao (Có nghĩa coi như thêm 1 vòng lặp)
Trong quá trình duyệt theo cột 'B' này, Nếu thỏa điều kiện ngày, ta xét đến cột 'A' cùng hàng; Nếu thỏa cả 2 sẽ đưa vô mảng kết quả.
Ta có thể thử bổ sung thêm công đoạn làm danh sách các ngày ở 2 ô tương ứng với ngày bắt đầu & ngày kết thúc để chọn (Validation) (?)
Chúc các bạn vui & thành công!
(1) Bạn đã thực hiện rồi;
(2) Việc cộng thêm này ta có thể thực hiện ngay trong chu trình (1)
(3) (Chưa hiểu lắm như: Lọc từ bảng dữ liệu nào, Lọc xong thì hiện kết quả ở đâu,. . . .? )
Bạn làm ví dụ kết quả mong muốn khoảng chục dòng vào sheet 2(LocData) xem thế nào?
Trường hợp giữa hai dòng "Yes" nhỏ hơn ba hoặc liên tiếp nhau thì bạn định thế nào nhỉ?
Như vậy là có thể sẽ có nhiều dòng "Yes" liên tiếp nhau đúng không bạn.
Bạn tham khảo. (Thay đổi giá trị n tại ô E1 sheet LocData)
Hiện tại bài #981 đang tính như vậy đấy bạn ạ.
Mình chưa thử nên không biết bạn ạ.
Bạn xem thử………..