Macro tạo Report!!! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tranviethung

Thành viên mới
Tham gia
26/8/08
Bài viết
37
Được thích
3
Tôi có file dữ liệu cần tổng hợp thành báo cáo, trong file Dl này gồm nhiều sheet, cấu trúc sheet dl giống nhau(khác về số lượng dòng). Trong file gửi kèm mình đã chỉ rõ: Vi du trong file co 5 sheet, các thông số cần thống kê vao sheet TH được lấy từ các sheet 5,4,3,2,1. Viết macro thực hiện công việc trên, thanks alot!!!!
 

File đính kèm

Tôi có file dữ liệu cần tổng hợp thành báo cáo, trong file Dl này gồm nhiều sheet, cấu trúc sheet dl giống nhau(khác về số lượng dòng). Trong file gửi kèm mình đã chỉ rõ: Vi du trong file co 5 sheet, các thông số cần thống kê vao sheet TH được lấy từ các sheet 5,4,3,2,1. Viết macro thực hiện công việc trên, thanks alot!!!!
Bạn nhớ bỏ các dòng trống ở Sh 5, mất công phải thêm dòng code.
PHP:
Option Explicit
Dim wsName As String
Dim iSh As Long, EndR As Long, myRng As Range, iR As Long
Public Sub GanDuLieu()
Application.ScreenUpdating = False
Sheets("Sheet TH").Select
Range("A2:D100").ClearContents
iR = 2
For iSh = 5 To 1 Step -1
  wsName = iSh
  With Sheets(wsName)
    EndR = .[E65000].End(xlUp).Row
    Set myRng = .Range("E2:E" & EndR)
  End With
  Cells(iR, 1) = iSh
  Cells(iR, 2) = WorksheetFunction.Max(myRng, 0)
  Cells(iR, 3) = WorksheetFunction.CountIf(myRng.Offset(, 1), "<>" & 1)
  Cells(iR, 4) = WorksheetFunction.CountIf(myRng.Offset(, 2), "<>" & 0)
  iR = iR + 1
Next
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Gửi ThuNghi!

Mình đã thử theo cách của bạn nhưng mình thấy kết quả chưa chính xác, mình có 1 số ý kiến bổ sung:
- Số sh trong file là động (số sh cần tổng hợp dl sẽ là tổng số sh trong file - 2 (sh1 và sh TH)). Mình có thể không cố định số sh đầu vào được chứ?
- DL sh5(có thể nhiều sh khác nữa) không cần bỏ các dòng trống.
- Kết quả các sh không có dòng tròng thì Ok nhưng sh có các dòng trống thì chưa đúng(cụ thể là sh5).
Cám ơn ThuNghi nhiều nhé!
 
Upvote 0
Mình đã thử theo cách của bạn nhưng mình thấy kết quả chưa chính xác, mình có 1 số ý kiến bổ sung:
- Số sh trong file là động (số sh cần tổng hợp dl sẽ là tổng số sh trong file - 2 (sh1 và sh TH)). Mình có thể không cố định số sh đầu vào được chứ?
- DL sh5(có thể nhiều sh khác nữa) không cần bỏ các dòng trống.
- Kết quả các sh không có dòng tròng thì Ok nhưng sh có các dòng trống thì chưa đúng(cụ thể là sh5).
Cám ơn ThuNghi nhiều nhé!
Thì sửa code lại 1 chút, góp ý về cách đặt tên sheet, nên là 01, 02... và không nên có khỏang trống hoặc tiếng Việt.
PHP:
Option Explicit
Dim wsName As String, ws As Worksheet
Dim iSh As Long, EndR As Long, myRng As Range, iR As Long, iRng As Range
Public Sub GanDuLieu()
Application.ScreenUpdating = False
Sheets("Sheet TH").Select
Range("A2:D100").ClearContents
iR = 2
For iSh = 1 To Worksheets.Count
  wsName = Worksheets((iSh)).Name
  If wsName <> "Sheet TH" Then
    If wsName <> "Sheet1" Then
        With Sheets(wsName)
            EndR = .[E65000].End(xlUp).Row
            If EndR = 1 Then GoTo exit_for
            Set myRng = .Range("E2:E" & EndR)
        End With
    Cells(iR, 1) = wsName
    Cells(iR, 2) = WorksheetFunction.Max(myRng, 0)
    Cells(iR, 3) = WorksheetFunction.CountIf(myRng.Offset(, 1), "<>" & 1)
    Cells(iR, 4) = WorksheetFunction.CountIf(myRng.Offset(, 2), "<>" & 0)
    iR = iR + 1
    End If
  End If
exit_for:
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Giá trị max của cột DL!

Cells(iR, 2) = WorksheetFunction.Max(myRng, 0) //tìm giá max của cột có dòng DL xen kẽ các dòng trống không chuẩn.
 
Upvote 0
Cells(iR, 2) = WorksheetFunction.Max(myRng, 0) //tìm giá max của cột có dòng DL xen kẽ các dòng trống không chuẩn.
Tôi thử insert dòng và gán thử thấy chay tốt mà.
Bạn xem thử file, chắc là file của bạn còn dòng ghi chú màu vàng.
Cùng lắm thì for i là hết chạy.
Bạn nên dùng excel 2007 xóa hết name sai của file của bạn.
 

File đính kèm

Upvote 0
Mình hỏi ThuNghi thêm ý này nữa nhé!

Yêu cầu đếm các giá trị khác 1 ở cột E nhưng nếu trong cột có các ô trống thì cũng bị nhầm tưởng đó cũng là giá trị khác 1 nên kq sẽ sai, vậy cho mình hỏi 2 câu lệnh:
Cells(iR, 3) = WorksheetFunction.CountIf(myRng.Offset(, 1), "<>" & 1, "")
Cells(iR, 4) = WorksheetFunction.CountIf(myRng.Offset(, 2), "<>" & 0, "")
có thể không đếm các ô trống được không(không xóa dòng trống nhé)
Nếu trường hợp trên mà không được thì sẽ xét đến cách chuẩn hóa( thêm 1 đoạn chương trình xóa bỏ những dòng trống trước khi thực thi thao tác Gandulieu)
Thanks alot
 
Upvote 0
Yêu cầu đếm các giá trị khác 1 ở cột E nhưng nếu trong cột có các ô trống thì cũng bị nhầm tưởng đó cũng là giá trị khác 1 nên kq sẽ sai, vậy cho mình hỏi 2 câu lệnh:
Cells(iR, 3) = WorksheetFunction.CountIf(myRng.Offset(, 1), "<>" & 1, "")
Cells(iR, 4) = WorksheetFunction.CountIf(myRng.Offset(, 2), "<>" & 0, "")
có thể không đếm các ô trống được không(không xóa dòng trống nhé)
Nếu trường hợp trên mà không được thì sẽ xét đến cách chuẩn hóa( thêm 1 đoạn chương trình xóa bỏ những dòng trống trước khi thực thi thao tác Gandulieu)
Thanks alot
Sorry quên mất đếm luôn blank, bạn thêm câu sau vào

Cells(iR, 3) = WorksheetFunction.CountIf(myRng.Offset(, 1), "<>" & 1, "")- WorksheetFunction.CountBlank(myRng)

Cells(iR, 4) = WorksheetFunction.CountIf(myRng.Offset(, 2), "<>" & 1, "")- WorksheetFunction.CountBlank(myRng)
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom