Giúp tổng hợp dữ liệu từ dọc sang ngang bằng VBA (1 người xem)

Liên hệ QC

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

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Chà, dạo này em hỏi anh chị nhiều quá.

Em có file đính kèm bao gồm các file con có tên là dạng số và một file tổng hợp. Cho em hỏi làm thế nào để code tự động làm công việc thủ công như sau:

Giả sử với sheet 15196
Tên sheet sẽ được add vào B11 (15196)
Các vùng dữ liệu ở sheet 15196 có địa chỉ G21:G30, I21:I30 và K21:K30 sẽ lần lượt add vào địa chỉ tương ứng ở cột tổng hợp như sau: N11:W11, Z11:AI11 và AL11:AU11.

Tương tự sheet 15198
Tên sheet sẽ được add vào B12 (15198)
Các vùng dữ liệu ở sheet 15196 có địa chỉ G21:G30, I21:I30 và K21:K30 sẽ lần lượt add vào địa chỉ tương ứng ở cột tổng hợp như sau: N12:W12, Z12:AI12 và AL12:AU12.

...Các sheet con khác tiếp tục chu trình như trên.

Em cảm ơn!
 
Lần chỉnh sửa cuối:
Chà, dạo này em hỏi anh chị nhiều quá.

Em có file đính kèm bao gồm các file con có tên là dạng số và một file tổng hợp. Cho em hỏi làm thế nào để code tự động làm công việc thủ công như sau:

Giả sử với sheet 15196
Tên sheet sẽ được add vào B11 (15196)
Các vùng dữ liệu ở sheet 15196 có địa chỉ G21:G30, I21:I30 và K21:K30 sẽ lần lượt add vào địa chỉ tương ứng ở cột tổng hợp như sau: N11:W11, Z11:AI11 và AL11:AU11.

Tương tự sheet 15198
Tên sheet sẽ được add vào B12 (15198)
Các vùng dữ liệu ở sheet 15196 có địa chỉ G21:G30, I21:I30 và K21:K30 sẽ lần lượt add vào địa chỉ tương ứng ở cột tổng hợp như sau: N12:W12, Z12:AI12 và AL12:AU12.

...Các sheet con khác tiếp tục chu trình như trên.

Em cảm ơn!

Bạn chạy thử Sub này, Sheet nào không liên quan thì đừng đặt tên sheet là Number nhé.
PHP:
Public Sub GPE()
Dim Ws As Worksheet, sAr(), ShName(1 To 100, 1 To 1)
Dim Ar1(1 To 100, 1 To 10), Ar2(1 To 100, 1 To 10), Ar3(1 To 100, 1 To 10)
Dim I As Long, K As Long
For Each Ws In Worksheets
    If IsNumeric(Ws.Name) Then                     '<------------ Tên sheet là Number'
        K = K + 1: ShName(K, 1) = Ws.Name
        sAr = Ws.Range("G21:K30").Value
        For I = 1 To 10
            Ar1(K, I) = sAr(I, 1)
            Ar2(K, I) = sAr(I, 3)
            Ar3(K, I) = sAr(I, 5)
        Next I
    End If
Next Ws
With Sheets("Tong hop")
    .Range("B11").Resize(K) = ShName
    .Range("N11").Resize(K, 10) = Ar1
    .Range("Z11").Resize(K, 10) = Ar2
    .Range("AL11").Resize(K, 10) = Ar3
End With
End Sub
 
Upvote 0
:(( cảm ơn anh Ba tê nhiều lắm ạ!

Cho em hỏi thêm một khía cạnh về mảng đó là nếu khi lọc mà chạy code mảng thì sẽ có vấn đề (code lỗi or kết quả không như mong đợi) có đúng không anh? Có cách nào mà lọc hay không lọc thì cũng sẽ không ảnh hưởng gì đến toàn bộ mảng mình đang làm việc không ạ?
 
Upvote 0
:(( cảm ơn anh Ba tê nhiều lắm ạ!

Cho em hỏi thêm một khía cạnh về mảng đó là nếu khi lọc mà chạy code mảng thì sẽ có vấn đề (code lỗi or kết quả không như mong đợi) có đúng không anh? Có cách nào mà lọc hay không lọc thì cũng sẽ không ảnh hưởng gì đến toàn bộ mảng mình đang làm việc không ạ?

Hổng hiểu.
Code lỗi có lý do của code lỗi, kết quả không như mong đợi cũng có lý do của nó.
Nếu lỗi là do con người thì "con người" đừng để những lý do đó diễn ra!
 
Upvote 0
Đây anh xem file nhé, em lọc shift D thì nó không tính của D mà chỉ tính của những ca còn lại, không những vậy còn tính sai. Anh thử bỏ lọc và chạy ở cột biểu tượng giơ tay sau đó lọc bỏ shift D hai kết quả khác nhau anh ạ. Bỏ lọc thì mới tính "hết" và tính đúng.
 

File đính kèm

Upvote 0
Em nghĩ chắc phải thêm dòng lệnh tác động để việc filter cũng không ảnh hưởng nhưng tìm mãi trong diến đàn cũng như trên mạng mà không thấy có cái nào na ná vậy.
 
Upvote 0
Đây anh xem file nhé, em lọc shift D thì nó không tính của D mà chỉ tính của những ca còn lại, không những vậy còn tính sai. Anh thử bỏ lọc và chạy ở cột biểu tượng giơ tay sau đó lọc bỏ shift D hai kết quả khác nhau anh ạ. Bỏ lọc thì mới tính "hết" và tính đúng.

Tôi không tham gia từ đầu, không biết code làm việc gì, kết quả ra sao, ở đâu.
Bài trước chỉ nhìn code để giúp chỗ "Chọn sheet làm việc".
Như tôi nói ở bài trước, biết lỗi do "con người" thì con người tìm cách sửa thôi.
Ví dụ, khi ở chế độ Filter bị lỗi thì thoát chế độ Filter trước rồi hãy thực hiện cái gì đó...
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng, code dựa trên dữ liệu ca và giờ ra vào để chấm, nhờ mọi người giúp và tìm tòi thêm em hoàn thiện xong rồi. Vì đòi hỏi công việc, em muốn dù Filter thì khi chạy code cũng không ảnh hưởng thì có cách nào không anh?
 
Upvote 0
Web KT

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

Back
Top Bottom