Nhờ các bạn viết cho cái Code tự động sao chép dữ liệu

Liên hệ QC

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
844
Nghề nghiệp
CNVC Laos
Trong bảng tính của mình gồm có 5 Sheet là:Sheet"TongHop",A,B,C và D.
mình muốn khi ta nhập dữ liệu vào cột C trong Sheet"TongHop" là A thì tất
cả dữ liệu trong hàng đó sẽ tự động sao chép sang Sheet"A",nếu nhập vào
là B thì sẽ sao chép vào Sheet"B",tương tự như vậy với Sheet còn lại.
nếu dữ liệu trong Sheet"TongHop" thay đổi thì dữ liệu trong các Sheet kia
cũng thay đổi.
số thứ tự của các Sheet"A","B","C" và "D" sẽ tự động điền theo thứ tự 1,2...
Cảm ơn các bạn.
 

File đính kèm

  • SaoChepCoDieuKien.xls
    21 KB · Đọc: 72
Trong bảng tính của mình gồm có 5 Sheet là:Sheet"TongHop",A,B,C và D.
mình muốn khi ta nhập dữ liệu vào cột C trong Sheet"TongHop" là A thì tất
cả dữ liệu trong hàng đó sẽ tự động sao chép sang Sheet"A",nếu nhập vào
là B thì sẽ sao chép vào Sheet"B",tương tự như vậy với Sheet còn lại.
nếu dữ liệu trong Sheet"TongHop" thay đổi thì dữ liệu trong các Sheet kia
cũng thay đổi.
số thứ tự của các Sheet"A","B","C" và "D" sẽ tự động điền theo thứ tự 1,2...
Cảm ơn các bạn.
Cái bạn này "mắc cười" quá, biểu lọc mà bảng dữ liệu trụi lủi thì lấy gì mà lọc
Nói vui thôi nhé, đừng giận. Bạn làm thử thế này xem
Alt + F11 ==> bấm vào This WorkBook ==> Chép cái này vào
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim Vung As Range, Ten As String, Ws As Worksheet
    Set Ws = Sheets("TongHop")
    Set Vung = Ws.Range(Ws.[a1], Ws.[a10000].End(xlUp)).Resize(, 34)
    Ten = ActiveSheet.Name
        If Ten <> "TongHop" Then
        [a1].CurrentRegion.Clear
            With Vung
                .AutoFilter 3, Ten
                .SpecialCells(12).Copy [a1]
                .AutoFilter
            End With
                Range([c2], [c1000].End(xlUp)).Offset(, -2) = [row(A:A)]
    End If
End Sub
Khi chọn sheet nào code sẽ lọc dữ liệu ở sheet TongHop đem sang sheet đó
Thân
 
Upvote 0
Cảm ơn bạn concogia đã giúp đỡ,cái Code của bạn sử dụng được ̣đúng theo ý mình,tuy nhiên nó lại bất cập ở chỗ
là nếu mình thêm Sheet mới thì cái tiêu đề ở hàng thứ nhất của Sheet"TongHop" lại hiện nên ở Sheet mới,bạn xem
có cách nào làm cho nó chỉ sao chép dữ liệu vào các Sheet mình cần (A,B,C và D)
Cảm ơn bạn
 
Upvote 0
Cảm ơn bạn concogia đã giúp đỡ,cái Code của bạn sử dụng được ̣đúng theo ý mình,tuy nhiên nó lại bất cập ở chỗ
là nếu mình thêm Sheet mới thì cái tiêu đề ở hàng thứ nhất của Sheet"TongHop" lại hiện nên ở Sheet mới,bạn xem
có cách nào làm cho nó chỉ sao chép dữ liệu vào các Sheet mình cần (A,B,C và D)
Cảm ơn bạn
Bạn nhìn trong code có đoạn
If Ten <> "TongHop" Then
tức là nếu Activesheet mà khác "TongHop" thì code làm việc ( vì trong file của bạn chỉ có 5 sheet ), bạn có thể sửa lại
If Ten = "A" Or Ten = "B" ......Then
Code chỉ làm việc với những sheet bạn khai báo trên mà không quan tâm file của bạn có bao nhiêu sheet
Thân
 
Upvote 0
Chào bạn concogia ,bạn cho mình hỏi là cái Code sao chép dữ liệu sang Sheet khác này có thể mở rộng
thêm được không ? ý mình là cùng một lúc có thể sao chép theo điều kiện dữ liệu của cột khác,ví dụ:
trong cột F có dữ liệu là E,F,G và H thì nó sẽ tự động sao chép vào Sheet"E","F","G" và "H"
mình muốn sao chép như vậy trong 03 cột là: C,F và K của sheet"TongHop"
Nếu được bạn sửa lại giúp mình với.Cảm ơn bạn nhiều.
 
Upvote 0
Chào bạn concogia ,bạn cho mình hỏi là cái Code sao chép dữ liệu sang Sheet khác này có thể mở rộng
thêm được không ? ý mình là cùng một lúc có thể sao chép theo điều kiện dữ liệu của cột khác,ví dụ:
trong cột F có dữ liệu là E,F,G và H thì nó sẽ tự động sao chép vào Sheet"E","F","G" và "H"
mình muốn sao chép như vậy trong 03 cột là: C,F và K của sheet"TongHop"
Nếu được bạn sửa lại giúp mình với.Cảm ơn bạn nhiều.

Bạn concogia thân mến,mình có sửa lại cái Code của bạn để sao chép như đã nêu ở trên và nó
đã hoạt động tốt,bạn xem Code mình đã sửa:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Vung As Range, Ten As String, Ws As Worksheet
Set Ws = Sheets("TongHop")
Set Vung = Ws.Range(Ws.[a6], Ws.[a65000].End(xlUp)).Resize(, 34)
Ten = ActiveSheet.Name
If Ten = "A" Or Ten = "B" Or Ten = "C" Or Ten = "D" Then
[a6].CurrentRegion.Clear
With Vung
.AutoFilter 3, Ten
.SpecialCells(12).Copy [a6]
.AutoFilter
End With
Range([c7], [c65000].End(xlUp)).Offset(, -2) = [row(A:A)]
End If
If Ten = "E" Or Ten = "F" Or Ten = "G" Or Ten = "H" Then
[a6].CurrentRegion.Clear
With Vung
.AutoFilter 6, Ten
.SpecialCells(12).Copy [a6]
.AutoFilter
End With
Range([f7], [f65000].End(xlUp)).Offset(, -2) = [row(A:A)]
End If
If Ten = "I" Or Ten = "J" Or Ten = "K" Or Ten = "L" Then
[a6].CurrentRegion.Clear
With Vung
.AutoFilter 11, Ten
.SpecialCells(12).Copy [a6]
.AutoFilter
End With
Range([k7], [k65000].End(xlUp)).Offset(, -2) = [row(A:A)]
End If
End Sub
Tuy chạy được,nhưng nó lại không tự điền số thứ tự:1,2,3... ở các Sheet"E","F","G","H" và "I","J","K","L"
Mà lại Copy nguyên số thứ tự của dòng đó khi ở trong Sheet"TongHop"
Nhờ bạn xem lại Code và sửa giúp mình.Cảm ơn bạn
 
Upvote 0
Bạn concogia thân mến,mình có sửa lại cái Code của bạn để sao chép như đã nêu ở trên và nó
đã hoạt động tốt,bạn xem Code mình đã sửa:

Tuy chạy được,nhưng nó lại không tự điền số thứ tự:1,2,3... ở các Sheet"E","F","G","H" và "I","J","K","L"
Mà lại Copy nguyên số thứ tự của dòng đó khi ở trong Sheet"TongHop"
Nhờ bạn xem lại Code và sửa giúp mình.Cảm ơn bạn
Mã:
Range([c7], [c65000].End(xlUp)).Offset(, -2) = [row(A:A)]
Đây là đoạn code đánh số thứ tự, STT nằm ở cột A ta chọn vùng đầy đủ dữ liệu ( ở chỗ này là cột C, lui về trái 2 cột là chọn cột A ==. OK )
Chỗ này
Mã:
Range([f7], [f65000].End(xlUp)).Offset(, -2) = [row(A:A)]
là cột F, bạn lui về trái 2 cột, nó sẽ chọn cột E và "quánh" số thứ tự vào đó dù rằng bạn không muốn
Tương tự là chỗ này
Mã:
Range([k7], [k65000].End(xlUp)).Offset(, -2) = [row(A:A)]
Mình nghĩ bạn tự sửa được
Thân
 
Upvote 0
Bạn cho hỏi là,Nếu tiêu đề của mình mà nằm trong 2 dòng là dòng 5 và 6 ,có sử dụng Merge and Center thì phải sửa code lại chỗ nào.
Cảm ơn bạn
 
Upvote 0
Bạn cho hỏi là,Nếu tiêu đề của mình mà nằm trong 2 dòng là dòng 5 và 6 ,có sử dụng Merge and Center thì phải sửa code lại chỗ nào.
Cảm ơn bạn
Có 2 cách:
1 - Bỏ quách mấy cái merge đi, lọc xong rồi merge lại (bạn có thể ghi macro cho công việc này)
2 - Bạn chép sẵn các tiêu đề đã merge vào các sheet nhận dữ liệu, trong code bạn sửa chỗ này:
With Vung
.AutoFilter 3, Ten
.SpecialCells(12).Copy [a3]
.AutoFilter
End With
thành
With Vung
.AutoFilter 3, Ten
.SpecialCells(12).Offset(1).Copy [a3]
.AutoFilter
End With

[a3] là cell bắt đầu nhận dữ liệu đã lọc, bạn sửa lại cho phù hợp với bài của bạn
"Mẹt, Mẹt" nhì thì gọn gàng, đẹp, nhưng nếu phải làm việc với nó thì "Mệt, Mệt"....lắm
Thân
 
Upvote 0
Nhờ Các bạn chỉ dẫn cho mình ý nghĩa của từng dòng lệnh trên!. Cảm ơn các bạn!
 
Upvote 0
Chào bạn concogia ,nhờ bạn sửa lại cái Code để nó tự động sao chép dữ liệu sang Sheet khác,Chứ cứ mỗi
khi nhập dữ liệu ở Sheet"Data" xong mà phải đi bấm từng Sheet một thì mất thời gian và lại sợ quên.
Cảm ơn bạn
 
Upvote 0
Fương án mình đề xuất là vầy:

Tại trang TongHop bạn thêm 1 dòng trống đầu tiên;
Lấy ô [B1] (mới thêm) ta áp đặt Validation là danh sách tên các trang tính cần được chép đến (A,B,C,. . . .;

Khi nhập mới 1 record hay đã sửa xong nó, ta chọn tên trang tính đích cần chép ở [B1] để macro sự kiện gắn với ô này chép các records thuộc nhóm sang trang đích
 
Upvote 0
Tại trang TongHop bạn thêm 1 dòng trống đầu tiên;
Lấy ô [B1] (mới thêm) ta áp đặt Validation là danh sách tên các trang tính cần được chép đến (A,B,C,. . . .;

Khi nhập mới 1 record hay đã sửa xong nó, ta chọn tên trang tính đích cần chép ở [B1] để macro sự kiện gắn với ô này chép các records thuộc nhóm sang trang đích

Cái khó là mình lại nhập dư liệu vào Sheet"Data" bằng Form,nên không thể làm như cách của bạn được,
bạn xem có cách nào để nó tự động được không.
Cảm ơn bạn
 
Upvote 0
Cái khó là mình lại nhập dư liệu vào Sheet"Data" bằng Form,nên không thể làm như cách của bạn được,
bạn xem có cách nào để nó tự động được không.
Cảm ơn bạn

Mình tìm trên diễn đàn cả ngày hôm nay mà chẳng có bài nào nói đến vấn đề này...bó tay.
Các bạn làm ơn giúp mình xem có cách không,Cảm ơn các bạn
 
Upvote 0
Thì trên form ta cũng làm 1 comboBox chọn trang tính làm đích để chép đến

Bạn thử tìm trước xem, có mà!

--=0 --=0 --=0
 
Upvote 0
Tại trang TongHop bạn thêm 1 dòng trống đầu tiên;
Lấy ô [B1] (mới thêm) ta áp đặt Validation là danh sách tên các trang tính cần được chép đến (A,B,C,. . . .;

Khi nhập mới 1 record hay đã sửa xong nó, ta chọn tên trang tính đích cần chép ở [B1] để macro sự kiện gắn với ô này chép các records thuộc nhóm sang trang đích

Bạn hướng dẫn chi tiết cách này cho mình với,̣đọc xong rồi mà chả hiểu gì cả,Cảm ơn bạn.
 
Upvote 0
Mình nghĩ nếu dùng Pivottable cho mỗi sheet A, B, C kia thì không cần code nữa.
 
Upvote 0
Chào bạn concogia ,nhờ bạn sửa lại cái Code để nó tự động sao chép dữ liệu sang Sheet khác,Chứ cứ mỗi
khi nhập dữ liệu ở Sheet"Data" xong mà phải đi bấm từng Sheet một thì mất thời gian và lại sợ quên.
Cảm ơn bạn
"Trời ơi là Trời", mắc mớ gì mà bạn phải bấm từng sheet sau khi đã nhập liệu, code này là nó "phục kích" sẵn thôi, khi bạn chọn sheet bất kỳ (trong số sheet đã khai báo lọc dữ liệu) để xem ,in,....( mà cần thì mới chọn chứ ) thì code mới hoạt động, chép dữ liệu vào sheet đó còn không thì .....nó chẳng làm gì cả, tức là nếu sau khi nhập liệu xong bạn có tắt máy, đi ngủ cũng chẳng ảnh hưởng gì tới chiến sự ở Libya cả, ngày mai dậy, chọn vào sheet muốn làm gì đó với nó ( thí dụ in ) thì code sẽ làm việc với sheet đó. Híc
Thân
 
Upvote 0
Cái bạn này "mắc cười" quá, biểu lọc mà bảng dữ liệu trụi lủi thì lấy gì mà lọc
Nói vui thôi nhé, đừng giận. Bạn làm thử thế này xem
Alt + F11 ==> bấm vào This WorkBook ==> Chép cái này vào
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim Vung As Range, Ten As String, Ws As Worksheet
    Set Ws = Sheets("TongHop")
    Set Vung = Ws.Range(Ws.[a1], Ws.[a10000].End(xlUp)).Resize(, 34)
    Ten = ActiveSheet.Name
        If Ten <> "TongHop" Then
        [a1].CurrentRegion.Clear
            With Vung
                .AutoFilter 3, Ten
                .SpecialCells(12).Copy [a1]
                .AutoFilter
            End With
                Range([c2], [c1000].End(xlUp)).Offset(, -2) = [row(A:A)]
    End If
End Sub
Khi chọn sheet nào code sẽ lọc dữ liệu ở sheet TongHop đem sang sheet đó
Thân
tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Bài đã được tự động gộp:

Cái bạn này "mắc cười" quá, biểu lọc mà bảng dữ liệu trụi lủi thì lấy gì mà lọc
Nói vui thôi nhé, đừng giận. Bạn làm thử thế này xem
Alt + F11 ==> bấm vào This WorkBook ==> Chép cái này vào
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim Vung As Range, Ten As String, Ws As Worksheet
    Set Ws = Sheets("TongHop")
    Set Vung = Ws.Range(Ws.[a1], Ws.[a10000].End(xlUp)).Resize(, 34)
    Ten = ActiveSheet.Name
        If Ten <> "TongHop" Then
        [a1].CurrentRegion.Clear
            With Vung
                .AutoFilter 3, Ten
                .SpecialCells(12).Copy [a1]
                .AutoFilter
            End With
                Range([c2], [c1000].End(xlUp)).Offset(, -2) = [row(A:A)]
    End If
End Sub
Khi chọn sheet nào code sẽ lọc dữ liệu ở sheet TongHop đem sang sheet đó
Thân
tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Bài đã được tự động gộp:

Cái bạn này "mắc cười" quá, biểu lọc mà bảng dữ liệu trụi lủi thì lấy gì mà lọc
Nói vui thôi nhé, đừng giận. Bạn làm thử thế này xem
Alt + F11 ==> bấm vào This WorkBook ==> Chép cái này vào
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim Vung As Range, Ten As String, Ws As Worksheet
    Set Ws = Sheets("TongHop")
    Set Vung = Ws.Range(Ws.[a1], Ws.[a10000].End(xlUp)).Resize(, 34)
    Ten = ActiveSheet.Name
        If Ten <> "TongHop" Then
        [a1].CurrentRegion.Clear
            With Vung
                .AutoFilter 3, Ten
                .SpecialCells(12).Copy [a1]
                .AutoFilter
            End With
                Range([c2], [c1000].End(xlUp)).Offset(, -2) = [row(A:A)]
    End If
End Sub
Khi chọn sheet nào code sẽ lọc dữ liệu ở sheet TongHop đem sang sheet đó
Thân
tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Bài đã được tự động gộp:

Cái bạn này "mắc cười" quá, biểu lọc mà bảng dữ liệu trụi lủi thì lấy gì mà lọc
Nói vui thôi nhé, đừng giận. Bạn làm thử thế này xem
Alt + F11 ==> bấm vào This WorkBook ==> Chép cái này vào
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim Vung As Range, Ten As String, Ws As Worksheet
    Set Ws = Sheets("TongHop")
    Set Vung = Ws.Range(Ws.[a1], Ws.[a10000].End(xlUp)).Resize(, 34)
    Ten = ActiveSheet.Name
        If Ten <> "TongHop" Then
        [a1].CurrentRegion.Clear
            With Vung
                .AutoFilter 3, Ten
                .SpecialCells(12).Copy [a1]
                .AutoFilter
            End With
                Range([c2], [c1000].End(xlUp)).Offset(, -2) = [row(A:A)]
    End If
End Sub
Khi chọn sheet nào code sẽ lọc dữ liệu ở sheet TongHop đem sang sheet đó
Thân
tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
 

File đính kèm

  • Theo dõi sx SPM (1)-3.xlsx
    3.3 MB · Đọc: 7
Upvote 0
tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Bài đã được tự động gộp:


tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Bài đã được tự động gộp:


tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Bài đã được tự động gộp:


tôi có một bài toán tương tự nhưng không sao làm được xin hay giúp tôi
tôi muốn ở sheet 2024 tại cột B mà có dữ liệu thì dòng đó sẽ nhảy qua sheet kết quả các cột như tên khách hàng, tên khuôn, ngày thử máy, họ tên,..
Thử tham khảo code này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i&, j&, R&, D&
Dim Sh As Worksheet, Ws As Worksheet
Set Sh = Sheets("2024")
If Not Intersect(Target, Range("B3:B10000")) Is Nothing Then
    R = Target.Row
    Set Ws = Sheets("KetQua")
        D = Ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Ws.Cells(D, 1) = Sh.Cells(R, 3)
        Ws.Cells(D, 5) = Sh.Cells(R, 5)
        Ws.Cells(D, 8) = Sh.Cells(R, 8)
        Ws.Cells(D, 9) = Sh.Cells(R, 9)
        Ws.Cells(D, 15) = Sh.Cells(R, 25)
        Ws.Cells(D, 16) = Sh.Cells(R, 33)
        Ws.Cells(D, 17) = Sh.Cells(R, 34)
End If
End Sub
Xem file
Trong cột B /Sh 2024 bạn thử gõ vao đó 1 ký tự bất kỳ và enter====> sang sheet KetQua để kiểm tra( ở dòng cuối cùng).
 

File đính kèm

  • Theo dõi sx SPM (1)-3.xlsm
    3.3 MB · Đọc: 10
Upvote 0
Web KT
Back
Top Bottom