Xin hướng dẫn việc lấy dữ liệu các sheet về sheet tổng theo điều kiện (4 người xem)

Liên hệ QC

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

hoaiketoan

Thành viên mới
Tham gia
27/4/10
Bài viết
5
Được thích
0
Mình đang làm 1 file quản lý công việc, mong các bạn giúp. File mình đính kèm.
Nội dung là mình có khoảng 20 sheet của 20 xã (Trong file mình làm trước 3 xã là PVA, HP và TTĐ), trong đó có danh mục các công trình, khi đơn vị nộp mình sẽ nhập ngày, mình đã làm cột đếm số ngày và tô màu những công trình nộp lâu hơn 3 ngày (quá thời gian mình giải quyết).
Các bạn chỉ mình làm 1 sheet tổng trong đó sẽ rút ra những công trình có số ngày nộp nhiều hơn 3 ngày từ 20 sheet kia để theo dõi, không lấy những công trình chưa nộp (chưa có ngày nộp) hoặc trong hạn dưới 3 ngày,hoặc đã xử lý. Chứ như file của mình phải kích vô 20 sheet để xem thì chưa ok.
Cám ơn mọi người nhiều!
 

File đính kèm

Mình đang làm 1 file quản lý công việc, mong các bạn giúp. File mình đính kèm.
Nội dung là mình có khoảng 20 sheet của 20 xã (Trong file mình làm trước 3 xã là PVA, HP và TTĐ), trong đó có danh mục các công trình, khi đơn vị nộp mình sẽ nhập ngày, mình đã làm cột đếm số ngày và tô màu những công trình nộp lâu hơn 3 ngày (quá thời gian mình giải quyết).
Các bạn chỉ mình làm 1 sheet tổng trong đó sẽ rút ra những công trình có số ngày nộp nhiều hơn 3 ngày từ 20 sheet kia để theo dõi, không lấy những công trình chưa nộp (chưa có ngày nộp) hoặc trong hạn dưới 3 ngày,hoặc đã xử lý. Chứ như file của mình phải kích vô 20 sheet để xem thì chưa ok.
Cám ơn mọi người nhiều!
Xem thử file này coi sao.
 

File đính kèm

Xem thử file này coi sao.

Chào anh/ chị Ba tê, Em có đoạn này chưa hiểu lắm, mong anh giải đáp giúp ạ

With Sheets("GPE")
.Range("A3:F1000").ClearContents
If K Then .Range("A3:F3").Resize(K) = dArr => "If K Then" để ở đây để làm gì và Resize(K) có tác dung như thế nào.

Rất cảm ơn các Anh/ Chị.
 
Chào anh/ chị Ba tê, Em có đoạn này chưa hiểu lắm, mong anh giải đáp giúp ạ

With Sheets("GPE")
.Range("A3:F1000").ClearContents
If K Then .Range("A3:F3").Resize(K) = dArr => "If K Then" để ở đây để làm gì và Resize(K) có tác dung như thế nào.

Rất cảm ơn các Anh/ Chị.

2 dòng đầu, bạn biết rồi?
Dòng thứ 3 nghĩa là nếu tồn tại giá trị k, thì tính từ vùng A3:F3 dịch xuống dưới k dòng, gán giá trị mảng dArr.
Còn bạn muốn biết Resize là gì, xin mời bạn đến đây:
Chập chững đến VBA
 
Chào anh/ chị Ba tê, Em có đoạn này chưa hiểu lắm, mong anh giải đáp giúp ạ

With Sheets("GPE")
.Range("A3:F1000").ClearContents
If K Then .Range("A3:F3").Resize(K) = dArr => "If K Then" để ở đây để làm gì và Resize(K) có tác dung như thế nào.

Rất cảm ơn các Anh/ Chị.
Trong code, nếu điều kiện lọc đúng thì giá trị K bắt đầu tăng lên (lúc đầu K=0). Vậy trong trường hợp không lọc được bất cứ gì thì K vẫn =0, khi ấy Resize(K) sẽ bị lỗi (Resize chỉ chấp nhận đối số >0). Vì thế ta cần "IF K then" ý muốn nói rằng "Có lọc được thì ghi kết quả, không thì thôi"
----------------------------------------
With... End With: chỉ là động tác giống trong toán học "đặt thừa số chung". Nếu không With... End With thì ta phải viết đoạn code:

With Sheets("GPE")
.Range("A3:F1000").ClearContents
If K Then .Range("A3:F3").Resize(K) = dArr
End With
thành:
Sheets("GPE").Range("A3:F1000").ClearContents
If K Then Sheets("GPE").Range("A3:F3").Resize(K) = dArr
Mang Sheets("GPE") ra là "thừa số chung" bằng With... End With để khỏi viết lại nhiều lần
 
Trong code, nếu điều kiện lọc đúng thì giá trị K bắt đầu tăng lên (lúc đầu K=0). Vậy trong trường hợp không lọc được bất cứ gì thì K vẫn =0, khi ấy Resize(K) sẽ bị lỗi (Resize chỉ chấp nhận đối số >0). Vì thế ta cần "IF K then" ý muốn nói rằng "Có lọc được thì ghi kết quả, không thì thôi"
----------------------------------------
With... End With: chỉ là động tác giống trong toán học "đặt thừa số chung". Nếu không With... End With thì ta phải viết đoạn code:


thành:

Mang Sheets("GPE") ra là "thừa số chung" bằng With... End With để khỏi viết lại nhiều lần

Vâng, em cảm ơn anh ndu96081631
Anh cho em hỏi thêm trong đoạn code này mình cần phải redim lại mảng dArr mà không thể để kiểu không có size giống như sArr ạ?

Dim ws As Worksheet, sArr(), I As Long, J As Long, K As Long, R As Long, wsname As String
ReDim dArr(1 To 1000, 1 To 6)
 
Vâng, em cảm ơn anh ndu96081631
Anh cho em hỏi thêm trong đoạn code này mình cần phải redim lại mảng dArr mà không thể để kiểu không có size giống như sArr ạ?

Dim ws As Worksheet, sArr(), I As Long, J As Long, K As Long, R As Long, wsname As String
ReDim dArr(1 To 1000, 1 To 6)
Thường có 2 loại mảng: Loại mạng được gán giá trị "nguyên cục" một lần và mảng được gán giá trị theo từng phần tử
Ví dụ:
1> sArr = Ws.Range("B3:F" & R).Value thì sArr được gán giá trị "nguyên cục" từ vùng Range("gì gì đó").Value . Với loại này ta không cần định trước kích thước. Kích thước tự nó có được khi gán
2> ReDim dArr(1 To 1000, 1 To 6) trong trường hợp này cái dArr là loại mảng có được do gán từng phần tử vào. Với loại này, phải định trước kích thước cho nó bằng cách ReDim
Nói chung: kiến thức về mảng khá rắc rối, trong quá trình viết code rất dễ sai sót. Bạn làm nhiều tự nhiên có kinh nghiệm
Ngoài ra: những mô tả tôi nêu ở trên cũng chỉ đúng khi làm việc trên Excel VBA
 
sArr = Ws.Range("B3:F" & R).Value
Nó là phép gán mảng, mảng nguồn như nào thì mảng đích như vậy, chỉ có điều là nếu là mảng tĩnh thì sẽ không được.
ReDim dArr(1 To 1000, 1 To 6)
Cái này là định cỡ mảng, chỉ áp dụng cho mảng động, bình thường mảng động là mảng kích thước 0, có nghĩa là nó chả chứa được dữ liệu, phải định cỡ ( hay là xin cấp phát bộ nhớ cho mảng) rồi mới save dữ liệu được.
 
Thường có 2 loại mảng: Loại mạng được gán giá trị "nguyên cục" một lần và mảng được gán giá trị theo từng phần tử
Ví dụ:
1> sArr = Ws.Range("B3:F" & R).Value thì sArr được gán giá trị "nguyên cục" từ vùng Range("gì gì đó").Value . Với loại này ta không cần định trước kích thước. Kích thước tự nó có được khi gán
2> ReDim dArr(1 To 1000, 1 To 6) trong trường hợp này cái dArr là loại mảng có được do gán từng phần tử vào. Với loại này, phải định trước kích thước cho nó bằng cách ReDim
Nói chung: kiến thức về mảng khá rắc rối, trong quá trình viết code rất dễ sai sót. Bạn làm nhiều tự nhiên có kinh nghiệm
Ngoài ra: những mô tả tôi nêu ở trên cũng chỉ đúng khi làm việc trên Excel VBA

Cảm ơn Anh
Bài đã được tự động gộp:

Nó là phép gán mảng, mảng nguồn như nào thì mảng đích như vậy, chỉ có điều là nếu là mảng tĩnh thì sẽ không được.

Cái này là định cỡ mảng, chỉ áp dụng cho mảng động, bình thường mảng động là mảng kích thước 0, có nghĩa là nó chả chứa được dữ liệu, phải định cỡ ( hay là xin cấp phát bộ nhớ cho mảng) rồi mới save dữ liệu được.

Em hiểu rồi ạ, Cảm ơn anh
 
Web KT

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

Back
Top Bottom