Xem file nhé.Xin chào các bạn
Nhờ các bạn xem và lập giúp công thức lọc và sắp xếp dữ liệu cho bài toán trong file đính kèm. Cám ơn nhiều
Thử code này xem:Xin chào các bạn
Nhờ các bạn xem và lập giúp công thức lọc và sắp xếp dữ liệu cho bài toán trong file đính kèm. Cám ơn nhiều
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then
Range("A4").CurrentRegion.ClearContents
With Sheet1.Range("A2").CurrentRegion
Intersect(.Cells, .Offset(1, 2)).NumberFormat = "m"
.AutoFilter 3, Target
.SpecialCells(12).Copy
Range("A4").PasteSpecial 3
.AutoFilter
Intersect(.Cells, .Offset(1, 2)).NumberFormat = "dd-mm-yyyy"
End With
With Range("A4").CurrentRegion.Resize(, 4)
If .Rows.Count > 1 Then
.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
.Offset(1, 3).Resize(.Rows.Count - 1, 1).Value = "=DAY(RC[-1])+Year(RC[-1])/10000"
.Sort .Cells(2, 4), 1, , , , , , xlGuess
.Offset(1, 3).Resize(.Rows.Count - 1, 1).Clear
End If
End With
Target.Select
End If
End Sub
Code này chạy không đúng nha. Bạn kiểm tra lại tháng 2, tháng 7.Thử code này xem:
PHP:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$2" Then Range("A4").CurrentRegion.ClearContents With Sheet1.Range("A2").CurrentRegion Intersect(.Cells, .Offset(1, 2)).NumberFormat = "m" .AutoFilter 3, Target .SpecialCells(12).Copy Range("A4").PasteSpecial 3 .AutoFilter Intersect(.Cells, .Offset(1, 2)).NumberFormat = "dd-mm-yyyy" End With With Range("A4").CurrentRegion.Resize(, 4) If .Rows.Count > 1 Then .Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)") .Offset(1, 3).Resize(.Rows.Count - 1, 1).Value = "=DAY(RC[-1])+Year(RC[-1])/10000" .Sort .Cells(2, 4), 1, , , , , , xlGuess .Offset(1, 3).Resize(.Rows.Count - 1, 1).Clear End If End With Target.Select End If End Sub
Tôi tải file của bạn về mà sao hàm bị lỗi hết(#VALUE!)Xem file nhé.
Ngoài ra có thể dùng Macro.
Trong công thức tôi dùng toàn những hàm thông thường vì vậy cũng không hiểu tại sao máy bạn lại báo lỗi.Tôi tải file của bạn về mà sao hàm bị lỗi hết(#VALUE!)
Bạn xem lại cái coi!
Xem file nhé.
Ngoài ra có thể dùng Macro.
Tôi tìm ra rồi! trong DATA có một số ngày bị sai định dạng và có cả dấu (') ở đầu nữa.Trong công thức tôi dùng toàn những hàm thông thường vì vậy cũng không hiểu tại sao máy bạn lại báo lỗi.
Bạn gửi lại file bị báo lỗi tôi kiểm tra lại xem.
Chào Huu thang
Bạn có thể giải thích thêm về name GPE =IF(MONTH(NS)='Sinh nhat'!$C$2,DAY(NS)*10^7+(3000-YEAR(NS))*1000+OFFSET(NS,,-2),"") và công thức DATE(3000-INT(MOD(SMALL(GPE,ROW(A1)),10^7)/1000),$C$2,INT(SMALL(GPE,ROW(A1))/10^7)) không? Cám ơn
GPE=IF(MONTH(NS)='Sinh nhat'!$C$2,DAY(NS)*10^7+(3000-YEAR(NS))*1000+OFFSET(NS,,-2),"")
DATE(3000-INT(MOD(SMALL(GPE,ROW(A1)),10^7)/1000),$C$2,INT(SMALL(GPE,ROW(A1))/10^7))
-------Code này chạy không đúng nha. Bạn kiểm tra lại tháng 2, tháng 7.
Và bị lỗi phần đánh số thứ tự.
Code này chạy không đúng nha. Bạn kiểm tra lại tháng 2, tháng 7.
Và bị lỗi phần đánh số thứ tự
Đúng là do em sơ suất, lý ra sort trước rồi mới đánh STT, đàng này em lại làm ngược lạiĐúng, phần này bị lỗi .
With Range("A4").CurrentRegion.Resize(, 4)
If .Rows.Count > 1 Then
.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
.Offset(1, 3).Resize(.Rows.Count - 1, 1).Value = "=DAY(RC[-1])+Year(RC[-1])/10000"
.Sort .Cells(2, 4), 1, , , , , , xlGuess
.Offset(1, 3).Resize(.Rows.Count - 1, 1).Clear
End If
End With
With Range("A4").CurrentRegion
If .Rows.Count > 1 Then
.Resize(, 1).SpecialCells(2, 1).Value = "=DAY(RC[-1])+Year(RC[-1])/10000"
.Sort .Cells(2, 1), 1, , , , , , xlGuess
.Resize(, 1).SpecialCells(3, 1).Value = Evaluate("ROW(R:R)")
End If
End With
Hình như bạn chưa thử công cụ Consolidate thì phải, nó hoàn toàn đáp ứng nhu cầu của bạn mà không cần bất cứ công thức nàoChào các thành viên trong diễn đàn.
Hôm trước mình có hỏi về cách lọc và tính tổng giá trị dữ liệu trong bảng tính và đã có bạn giới thiệu về bài viết của bạn ndu nhưng mình tìm chưa được. Mong các bạn chỉ bảo mình chỗ này với, cảm ơn nhiều.
Để tính ra cột kết quả này mình làm thủ công tốn thời gian lắm vì số liệu bảng tính quá nhiều.
Sub Test()
With Application.InputBox("Chon vung du lieu nguon", Type:=8)
ActiveCell.Consolidate "'" & .Parent.Name & "'!" & .Address(, , 2), 9, 1, 1
ActiveCell.Resize(1, 2).Value = .Resize(1, 2).Value
With ActiveCell.CurrentRegion
.Sort .Cells(1, 1), 1, , , , , , xlYes
End With
End With
End Sub
1/Bạn chọn dữ liệu cột A ($A1$:$A14$) vào Data -> Filter -> advanced filter bấm lựa chọn copy to another location bấm dấu tick vào ô Unique records only. Trong ô copy to bấm vào vị trí muốn đặt (1 ô cụ thể trong bài của bạn là sheet1$C1$) -> ok.Chào các thành viên trong diễn đàn.
Hôm trước mình có hỏi về cách lọc và tính tổng giá trị dữ liệu trong bảng tính và đã có bạn giới thiệu về bài viết của bạn ndu nhưng mình tìm chưa được. Mong các bạn chỉ bảo mình chỗ này với, cảm ơn nhiều.
Để tính ra cột kết quả này mình làm thủ công tốn thời gian lắm vì số liệu bảng tính quá nhiều.
Tôi góp ý thế này:1/Bạn chọn dữ liệu cột A ($A1$:$A14$) vào Data -> Filter -> advanced filter bấm lựa chọn copy to another location bấm dấu tick vào ô Unique records only. Trong ô copy to bấm vào vị trí muốn đặt (1 ô cụ thể trong bài của bạn là sheet1$C1$) -> ok.
2/Bấm lựa chọn vùng mà bạn vừa được kết quả vào data sort sắp xếp lại dữ liệu.
3/Kết quả sau cùng:
D2=SUMIF($A$2:$A$14;C2;$B$2:$B$14)
.Hình như bạn chưa thử công cụ Consolidate thì phải, nó hoàn toàn đáp ứng nhu cầu của bạn mà không cần bất cứ công thức nào
Anh ơi! Trên GPE đã có bài hướng dẩn về Consolidate với hình ảnh minh họa rồi --> Anh tìm xem!.
--------
Cách tốt nhất (nếu được) là anh thấy chú NDU nên minh họa bằng hinh ảnh về cách xử dụng công cụ Consolidate ( anh học từ chú, anh hiểu, nhưng anh không biết minh họa ), để có thể chủ động trong việc làm là tối ưu nhất.
--------Anh ơi! Trên GPE đã có bài hướng dẩn về Consolidate với hình ảnh minh họa rồi --> Anh tìm xem!