Tự động copy dữ liệu khi tạo một sheet mới sang một sheet cũ (1 người xem)

  • Thread starter Thread starter meacupa
  • Ngày gửi Ngày gửi
Liên hệ QC

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

meacupa

Thành viên chính thức
Tham gia
2/12/11
Bài viết
77
Được thích
3
Hi cả nhà.
Mình hiện có một vấn đề không thể tự giải quyết được, mình đưa lên đây rất mong các bạn xem và giúp đỡ mình.
Hiện mình đang phải làm một file excel. Các sheet sẽ được tạo mới hàng ngày. Trong mỗi sheet có một mục mình gọi là "Sự cố".
Cái mình cần là tất cả các mục " Sự cố" của các sheet( kể cả khi mình tạo mới) sẽ tự động cập nhật dữ liệu vào chung một Sheet( sheet Sự cố). Mình có một file đính kèm theo cho dễ hiểu.

Rất cảm ơn các bạn.
 

File đính kèm

Hi cả nhà.
Mình hiện có một vấn đề không thể tự giải quyết được, mình đưa lên đây rất mong các bạn xem và giúp đỡ mình.
Hiện mình đang phải làm một file excel. Các sheet sẽ được tạo mới hàng ngày. Trong mỗi sheet có một mục mình gọi là "Sự cố".
Cái mình cần là tất cả các mục " Sự cố" của các sheet( kể cả khi mình tạo mới) sẽ tự động cập nhật dữ liệu vào chung một Sheet( sheet Sự cố). Mình có một file đính kèm theo cho dễ hiểu.

Rất cảm ơn các bạn.

Làm thử bằng cthức, trong khi đợi các đại cao thủ giải bằng vba
 

File đính kèm

Upvote 0
Cũng rất hay rồi bạn ah.
Không biết làm bằng VBA thì thế nào nhỉ
 
Upvote 0
Cũng rất hay rồi bạn ah.
Không biết làm bằng VBA thì thế nào nhỉ

bạn trộn cell lại chi vậy? tôi bỏ mấy cell trộn cell trộn được ko?
nếu vba thì chắc là duyệt qua các sheet, rồi copy dán vào đây, tuy nhiên gặp mấy cell trộn nó hay báo lổi lắm
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đoạn code này hay quá, nhờ ban chú thích dzum các dòng với:

Sub copy()


Dim ws As Worksheet
[a6:G1000].ClearContents
For Each ws In ActiveWorkbook.Worksheets

If ws.Index <> Sheets.Count Then
Range("a" & [C1000].End(3).Offset(1).Row) = ws.Index
Range("b" & [C1000].End(3).Offset(1).Row) = ws.Name
ws.Range("c6:G" & ws.[a1000].End(3).Row).copy [c2000].End(3).Offset(1)
End If
Next

@ Trường hợp mình muốn thay nút cập nhật này bằng nút Command Buttom (ActiveX Control) thì làm ntn?
 
Upvote 0
Đoạn code này hay quá, nhờ ban chú thích dzum các dòng với:


Mã:
Sub copy()


Dim ws As Worksheet 'khai báo cho nó biết "ws" là worksheet
    [a6:G1000].ClearContents 'xoá vùng A6:G1000
    For Each ws In ActiveWorkbook.Worksheets ' Lặp qua mỗi sheet trong workbook
    
    If ws.Index <> Sheets.Count Then 'nếu số thứ tự của sheet ko phải là sheet cuối cùng thì thực hiện lệnh sau
        Range("a" & [C1000].End(3).Offset(1).Row) = ws.Index 'dòng trống đâu tiên cùng của cột A = số tt của sheet mà nó lặp qua
        Range("b" & [C1000].End(3).Offset(1).Row) = ws.Name 'dòng trống đâu tiên cùng của cột B = số tên sheet của sheet mà nó lặp qua
        ws.Range("c6:G" & ws.[a1000].End(3).Row).copy [c2000].End(3).Offset(1) 'copy từ C6:G (dòng cuối cùng của cột A) qua sheet tổng hợp, dán tại vị trí dòng trống đầu tiện của cột C
    End If
    Next

@ Trường hợp mình muốn thay nút cập nhật này bằng nút Command Buttom (ActiveX Control) thì làm ntn?

tuy nhiên dòng lệch copy nó chiến bộ nhớ của máy nên nó sẻ ko nhanh bằng dòng lệnh này
Mã:
        [c2000].End(3).Offset(1).Resize(ws.[a1000].End(3).Row - 5, 5).Value = ws.Range("c6:G" & ws.[a1000].End(3).Row).Value

bạn muốn thay bằng Active X thì cứ việc vẻ nó ra-->nhấp double vào nó--->nó sẻ nhảy vào của sổ code, gõ tên module của bạn vào đây
==================
tôi nghỉ là cái lạ đối với bạn chắc là các lệnh xác định các dòng cuối cùng mà có dữ liệu, tức là xác định các vùng dự liệu có đata
bạn hãy thử như sau:
tại mọt sheet nào đó bạn nhấn phím Ctrl , mũi tên lên, xuống, phả, trái xem nó nhảy ra sao?
sau đó bạn cũng thao tác như vận, nhưng lần này bạn quay lại macro , sau đó thì xem lại code
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom