Đang hỏi ở đây thì cứ ở đó mà hỏi tiếpTình hình là pivotable tuy lọc cũng rất hay nhưng mình muốn nghiên cứu thêm về macro.
Nhờ cả nhà giúp mình lệnh code để lọc dữ liệu này ạ.
Yêu cầu: chỉ lọc dữ liệu từ ngày đến ngày trong 1 tháng.
Xin cảm ơn mọi người ạ.
bài nầy khá rốiTình hình là pivotable tuy lọc cũng rất hay nhưng mình muốn nghiên cứu thêm về macro.
Nhờ cả nhà giúp mình lệnh code để lọc dữ liệu này ạ.
Yêu cầu: chỉ lọc dữ liệu từ ngày đến ngày trong 1 tháng.
Xin cảm ơn mọi người ạ.
Sub GPE()
Dim Darr(), Arr(), i As Long, k As Long, LastR As Long
Dim NgayDau As Long, NgayCuoi As Long, Ngay As Long, Thang As Long
Dim Soluong As Long, SLhuy As Long, SoTien As Double, Tmp As String
sheetname = Right(Range("C8"), 2)
NgayDau = CLng(Range("D5").Value)
NgayCuoi = CLng(Range("F5").Value)
Thang = CLng(Range("H5").Value)
For i = 1 To ThisWorkbook.Sheets.Count
If Right(Sheets(i).Name, 2) = sheetname Then
With Sheets(i)
LastR = .Range("B" & Rows.Count).End(xlUp).Row
If LastR < 8 Then Exit Sub
Darr = .Range("B8:I" & LastR).Value
Exit For
End With
End If
Next i
ReDim Arr(1 To UBound(Darr), 1 To 9)
For i = 1 To UBound(Darr)
If CLng(Right(Darr(i, 1), 2)) = Thang Then
Ngay = CLng(Left(Darr(i, 1), 2))
If Ngay >= NgayDau Then
If Ngay <= NgayCuoi Then
If Darr(i, 5) <> Tmp Then
Tmp = Darr(i, 5)
k = k + 1
Arr(k, 1) = Tmp
Arr(k, 2) = 1
Arr(k, 3) = Mid(Tmp, InStr(Tmp, "/") + 1, 20) ' dóan mò ???
Arr(k, 4) = Darr(i, 6)
Else
Arr(k, 2) = Arr(k, 2) + 1
End If
Arr(k, 5) = Darr(i, 7)
If Darr(i + 1, 8) = 0 Then
Arr(k, 6) = Arr(k, 6) & "," & Darr(i, 6)
Arr(k, 7) = Arr(k, 7) + 1
End If
Arr(k, 8) = Arr(k, 8) + Darr(i, 8)
Arr(k, 9) = Arr(k, 8)
End If
End If
End If
Next i
With Sheets("LOC DU LIEU")
.Rows("14:20").Hidden = False
.Range("A14:J20").ClearContents
.Range("B21:J21").ClearContents
If k Then
For i = 1 To k
Tmp = Arr(i, 6)
If Tmp <> "" Then
Arr(i, 6) = Mid(Tmp, 2, Len(Tmp) - 1)
End If
Soluong = Soluong + Arr(i, 2)
SLhuy = SLhuy + Arr(i, 7)
SoTien = SoTien + Arr(i, 8)
Next i
.Range("A14").Resize(k, 9) = Arr
.Range("B21").Value = Soluong
.Range("G21").Value = SLhuy
.Range("H21").Value = SoTien
.Range("I21").Value = SoTien
If k + 13 < 20 Then .Rows(k + 14 & ":20").Hidden = True
End If
End With
End Sub
Bạn ơi! Xem giúp mình với. Mình vẫn chưa chạy được bạn à, nó báo lỗi bạn à.bài nầy khá rốiMã:Sub GPE() Dim Darr(), Arr(), i As Long, k As Long, LastR As Long Dim NgayDau As Long, NgayCuoi As Long, Ngay As Long, Thang As Long Dim Soluong As Long, SLhuy As Long, SoTien As Double, Tmp As String sheetname = Right(Range("C8"), 2) NgayDau = CLng(Range("D5").Value) NgayCuoi = CLng(Range("F5").Value) Thang = CLng(Range("H5").Value) For i = 1 To ThisWorkbook.Sheets.Count If Right(Sheets(i).Name, 2) = sheetname Then With Sheets(i) LastR = .Range("B" & Rows.Count).End(xlUp).Row If LastR < 8 Then Exit Sub Darr = .Range("B8:I" & LastR).Value Exit For End With End If Next i ReDim Arr(1 To UBound(Darr), 1 To 9) For i = 1 To UBound(Darr) If CLng(Right(Darr(i, 1), 2)) = Thang Then Ngay = CLng(Left(Darr(i, 1), 2)) If Ngay >= NgayDau Then If Ngay <= NgayCuoi Then If Darr(i, 5) <> Tmp Then Tmp = Darr(i, 5) k = k + 1 Arr(k, 1) = Tmp Arr(k, 2) = 1 Arr(k, 3) = Mid(Tmp, InStr(Tmp, "/") + 1, 20) ' dóan mò ??? Arr(k, 4) = Darr(i, 6) Else Arr(k, 2) = Arr(k, 2) + 1 End If Arr(k, 5) = Darr(i, 7) If Darr(i + 1, 8) = 0 Then Arr(k, 6) = Arr(k, 6) & "," & Darr(i, 6) Arr(k, 7) = Arr(k, 7) + 1 End If Arr(k, 8) = Arr(k, 8) + Darr(i, 8) Arr(k, 9) = Arr(k, 8) End If End If End If Next i With Sheets("LOC DU LIEU") .Rows("14:20").Hidden = False .Range("A14:J20").ClearContents .Range("B21:J21").ClearContents If k Then For i = 1 To k Tmp = Arr(i, 6) If Tmp <> "" Then Arr(i, 6) = Mid(Tmp, 2, Len(Tmp) - 1) End If Soluong = Soluong + Arr(i, 2) SLhuy = SLhuy + Arr(i, 7) SoTien = SoTien + Arr(i, 8) Next i .Range("A14").Resize(k, 9) = Arr .Range("B21").Value = Soluong .Range("G21").Value = SLhuy .Range("H21").Value = SoTien .Range("I21").Value = SoTien If k + 13 < 20 Then .Rows(k + 14 & ":20").Hidden = True End If End With End Sub
bạn chỉ cần chép code vào 1 nơi thôi, nằm 2 nơi nên báo lỗi, chỉnh lại vài dòng lệnh cho kết quả hợp lý hơn, và đề phòng dữ liệu chỉ có 1 dòngBạn ơi! Xem giúp mình với. Mình vẫn chưa chạy được bạn à, nó báo lỗi bạn à.
Bạn xem giúp mình với nhé. Mình cảm ơn bạn rất nhiều.
Kết quả cột C=ROUNDUP(E14/50,0)Bạn xem trong file đính kèm.
Kết quả cột C=ROUNDUP(E14/50,0)Bạn xem trong file đính kèm.
Chọn mà không chạy là sao, chọn cái gì?Kết quả cột C=ROUNDUP(E14/50,0)
tức là = cột E (đến số)/50, nếu ra số lẻ làm tròn tăng lên 1.
Ví dụ: cột đến số là 0000110 thì cột C (số quyển) = 110/50 sẽ ra 2,2 thì nó sẽ ra kết quả là quyển số 3
Em chọn nhưng code vẫn không chạy Anh à.
Anh cố gắng vào xem lại giúp em với nhé Anh.
Trân trọng cảm ơn Anh!
Anh Ba Tê ơi, khi em lọc những loại chỉ hiện ra 1 dòng thì dòng "TỔNG CỘNG" nó tổng lại Sai Anh à.Chọn mà không chạy là sao, chọn cái gì?
Tôi có ghi chú là phải thay đổi ô C8 thì code mới chạy.
Bây giờ làm cho bạn cái nút bấm, khi nào muốn chạy thì bấm nút vậy.
Bấm không chạy nữa thì tính sau.
Bạn kiểm tra lại file này.Anh Ba Tê ơi, khi em lọc những loại chỉ hiện ra 1 dòng thì dòng "TỔNG CỘNG" nó tổng lại Sai Anh à.
Do lúc đầu máy tính của em nó bị lỗi, chứ chọn ngay tại ô C8 sẽ hiện ra kết quả luôn nhanh hơn là dung nút: "Bấm". Anh bỏ giúp em chức năng bấm mà làm như ban đầu, chọn ô C8 luôn.
Anh kiểm tra lại giúp em nhé Anh.
Trân trọng cảm ơn Anh.
Kính chúc Anh dồi dào sức khỏe, thành công!
Chạy rất OK Anh Ba Tê à.Bạn kiểm tra lại file này.
Alt+F11Chạy rất OK Anh Ba Tê à.
Em rất tò mò không biết Anh đã làm như thế nào, nhất là chỗ: không cần nút Bấm để chạy code.
Anh có thể hướng dẫn cho em cách thực hiện được không Anh.
Em rất muốn biết để tìm hiểu, nghiên cứu và học hỏi thêm.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$8" Then GPE
End Sub
Kính chào Anh Ba Tê!Alt+F11
Sub chính nằm trong Module.
"Biểu nó chạy" thì nằm trong Sheet5: Có thay đổi ô C8 thì nó chạy.
PHP:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$8" Then GPE End Sub
Kính nhờ Anh hỗ trợ giúp em thêm sheet Giay nop tien.Alt+F11
Sub chính nằm trong Module.
"Biểu nó chạy" thì nằm trong Sheet5: Có thay đổi ô C8 thì nó chạy.
PHP:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$8" Then GPE End Sub