Tự động copy có điều kiện sang sheet khác

Liên hệ QC

thanhtungpt1

Thành viên mới
Tham gia
19/6/09
Bài viết
23
Được thích
5
Mình có file DS hoc sinh.xls . Sheet1 là danh sách học sinh toàn khối . Mình muốn tự động cập nhật có điều kiện sang các sheet khác . Cụ thể : Em nào ở lớp 6/1 thì tự động cập nhật sang sheet 6/1 , Em nào ở lớp 6/2 thì tự động cập nhật sang sheet 6/2 .... nếu Sheet1 là danh sách học sinh toàn khối có chỉnh sửa thì các sheet kia cũng tự động cập nhật . Rất mong các bạn giúp đỡ , cám ơn rất nhiều !
có File đính kèm :
 

File đính kèm

  • DS hoc sinh.xls
    90.5 KB · Đọc: 349
Mình có file DS hoc sinh.xls . Sheet1 là danh sách học sinh toàn khối . Mình muốn tự động cập nhật có điều kiện sang các sheet khác . Cụ thể : Em nào ở lớp 6/1 thì tự động cập nhật sang sheet 6/1 , Em nào ở lớp 6/2 thì tự động cập nhật sang sheet 6/2 .... nếu Sheet1 là danh sách học sinh toàn khối có chỉnh sửa thì các sheet kia cũng tự động cập nhật . Rất mong các bạn giúp đỡ , cám ơn rất nhiều !
có File đính kèm :


Theo như bạn nói thì để đơn giản hơn mình làm một mẫu chung, sau đó nếu muốn xem DS lớp nào thì chọn lớp đó

Bạn xem file đính kèm thử có giúp gì được cho bạn không nha

Chúc bạn thành công./.
 

File đính kèm

  • Goi ban xem thu.rar
    21.3 KB · Đọc: 932
Upvote 0
Cảm ơn bạn rất nhiều ! Nếu được bạn chỉ mình cách làm để mình làm cho khối khác chẳng hạn khối 7 , 8 ... Dựa vào đó mình đã làm cho khối khác nhưng không được . Rất mong bạn giúp đỡ .
Mình xem file bạn gởi , tới lớp 6/8 nó chạy xong thì thiếu mấy em , mình cũng không sửa được , bạn giúp mình với . Cảm ơn bạn rất nhiều !
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn rất nhiều ! Nếu được bạn chỉ mình cách làm để mình làm cho khối khác chẳng hạn khối 7 , 8 ... Dựa vào đó mình đã làm cho khối khác nhưng không được . Rất mong bạn giúp đỡ .
Mình xem file bạn gởi , tới lớp 6/8 nó chạy xong thì thiếu mấy em , mình cũng không sửa được , bạn giúp mình với . Cảm ơn bạn rất nhiều !



Chào bạn!

Mình đã chỉnh sửa lại cho đầy đủ rồi, bạn xem file đính kèm nha


+ Nếu bạn làm cho khối khác thì bạn cũng copy file này ra dùng cho khối khác (phải cùng cấu trúc dữ liệu) hoặc làm tiếp theo số liệu của khối khác liền kề ở phía bên dưới; muốn xem khối nào lớp nào thì chọn khối đó lớp đó
+ Nếu bạn muốn tìm hiểu thì bạn có thể bầm F3 -> Paste List hoặc vào insert->Name-> Define để xem công thức bạn nhé


Chúc bạn thành công./.
 

File đính kèm

  • Goi ban xem thu.rar
    19 KB · Đọc: 948
Upvote 0
Cám ơn bạn giao_nguyenthat rất nhiều , theo cách của bạn mình làm được rồi , mình rất thích cách của bạn , một lần nữa mình cám ơn bạn thật nhiều .
Có cách nào để nó tự động lọc ra mỗi lớp là mỗi sheet không bạn ? Vì cuối mỗi danh sách mình còn có nhiều cái tổng hợp khác nữa . Mình rất mong bạn giao_nguyenthat và các bạn khác giúp mình với .
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn giao_nguyenthat rất nhiều , theo cách của bạn mình làm được rồi , mình rất thích cách của bạn , một lần nữa mình cám ơn bạn thật nhiều .
Có cách nào để nó tự động lọc ra mỗi lớp là mỗi sheet không bạn ? Vì cuối mỗi danh sách mình còn có nhiều cái tổng hợp khác nữa . Mình rất mong bạn giao_nguyenthat và các bạn khác giúp mình với .
Lọc danh sách sang từng sheet cũng đơn giản thôi, nhưng nếu sử dụng công thức thì trong bảng tính của bạn sẽ 'hơi bị nhiều" công thức, mình đề nghị một cách lọc bằng VBA, bạn nhập, hoặc sửa chữa, thêm bớt dữ liệu xong thì bấm cái nút nằm kế bên dữ liệu sẽ đưa về các sheet
Thân
 

File đính kèm

  • lop ve sheet1111.rar
    27.5 KB · Đọc: 902
Upvote 0
Cách của bạn concogia đúng là cái mình cần , nhưng mình bấm nút nó không có chạy gì hết vậy bạn ? bạn xem lại dùm mình với .
Sẵn tiện bạn hướng dẫn mình cách làm một chút chút hoặc nếu mình có nhiều lớp hơn hay làm cho các khối khác thì phải làm sao . Bạn giúp mình với , mình rất mong tin .
 
Upvote 0
Lọc danh sách sang từng sheet cũng đơn giản thôi, nhưng nếu sử dụng công thức thì trong bảng tính của bạn sẽ 'hơi bị nhiều" công thức, mình đề nghị một cách lọc bằng VBA, bạn nhập, hoặc sửa chữa, thêm bớt dữ liệu xong thì bấm cái nút nằm kế bên dữ liệu sẽ đưa về các sheet
Thân
Bây giờ mình không muốn tách theo lớp nữa mà muốn tách theo tên trường thì sửa code thế nào bạn, giúp mình nhé. ví dụ thay vì lớp 6/1, 6/2 .... (cột lớp trong ví dụ của bạn thanhtungpt1) của mình là trường: nghĩa hòa, tân thanh, hà bắc .... thì sửa code thế nào.
Mình không đưa được file đính kèm trong diễn đàn. bạn thông cảm nhé.
bạn tải file đính kèm của mính tại: http://www.mediafire.com/?0ais41kq11lt87u
Nếu được tên của các sheet mới trùng với tên trường ( có thể không dấu) thì tốt, còn nếu khó thì thôi cũng được miễn sao là tách được các trường ra các sheet khác.
Xin chân thành cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Theo như bạn nói thì để đơn giản hơn mình làm một mẫu chung, sau đó nếu muốn xem DS lớp nào thì chọn lớp đó

Bạn xem file đính kèm thử có giúp gì được cho bạn không nha

Chúc bạn thành công./.

cách này có nhược điểm là tạo ra dòng trắng ở 6/2 , 6/3 bạn có thể loại bỏ dòng trống này không
 
Upvote 0
Lọc danh sách sang từng sheet cũng đơn giản thôi, nhưng nếu sử dụng công thức thì trong bảng tính của bạn sẽ 'hơi bị nhiều" công thức, mình đề nghị một cách lọc bằng VBA, bạn nhập, hoặc sửa chữa, thêm bớt dữ liệu xong thì bấm cái nút nằm kế bên dữ liệu sẽ đưa về các sheet
Thân

Bác có thể lọc em học sinh theo lớp và sắp xếp thứ thự các em theo chỗ ở được không. Và thêm được tùy chọn ấp (chỗ ở) nào xếp trước, ấp nào xếp sau thì càng tuyệt.
 
Upvote 0
đúng là cái mình cần , nhưng mình bấm nút nó không có chạy gì hết vậy bạn ? bạn xem lại dùm mình với .
Sẵn tiện bạn hướng dẫn mình cách làm một chút chút hoặc nếu mình có nhiều lớp hơn hay làm cho các khối khác thì phải làm sao . Bạn giúp mình với , mình rất mong tin .

Cách của CòGià vẫn có thể cải tiến được nữa; Ví dụ:
Ta lập ở đâu đó danh sách (DS) lớp duy nhất
Ta đưa DS này vô 1 Combo hay 1 Validition Lisst thế là khi ta chọn 1 từ DS lớp, ta sẽ có DS học sinh lớp đó ở trang tính Report
Khác với trường hợp trên là ta chỉ dùng 01 trang tính thay vì mỗi lớp 1 trang tính

Bạn xem trong file đính kèm (Tại [D1] của trang 'Loc') nếu thích mình sẽ tiếp tục hoàn chỉnh cho bạn)
 

File đính kèm

  • GPE.rar
    9.3 KB · Đọc: 213
Lần chỉnh sửa cuối:
Upvote 0
Bạn chọn trường tại [L2] trong file.

Bây giờ mình không muốn tách theo lớp nữa mà muốn tách theo tên trường thì sửa code thế nào bạn, giúp mình nhé. Xin chân thành cảm ơn
PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [L2]) Is Nothing Then
   Dim Sh As Worksheet
   
   LocTruong
   Set Sh = Sheets("Report")
   Sh.[B4].CurrentRegion.Offset(1, 1).ClearContents
   [ic1].CurrentRegion.Offset(1).Copy Destination:=Sh.[B5]
   Sh.Select
 End If
End Sub

Mã:
[B]Sub LocTruong()[/B]
 Columns("B:J").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "L1:L2"), CopyToRange:=Range("IC1:IK1"), Unique:=False
[B]End Sub[/B]
 

File đính kèm

  • GPE.rar
    24.4 KB · Đọc: 142
Upvote 0
PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [L2]) Is Nothing Then
   Dim Sh As Worksheet
   
   LocTruong
   Set Sh = Sheets("Report")
   Sh.[B4].CurrentRegion.Offset(1, 1).ClearContents
   [ic1].CurrentRegion.Offset(1).Copy Destination:=Sh.[B5]
   Sh.Select
 End If
End Sub
Mã:
[B]Sub LocTruong()[/B]
 Columns("B:J").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "L1:L2"), CopyToRange:=Range("IC1:IK1"), Unique:=False
[B]End Sub[/B]
Cảm ơn bạn đã giúp mình, nhưng ý của mình là nếu có 10 trường thì tự tách thành 10 sheet khác nhau cơ không phải chọn như bạn ( để mính gửi về các trường mà). Bạn sửa giúp mình nhé.
Bạn tải file đính kèm của mính tại: http://www.mediafire.com/?0ais41kq11lt87u
 
Lần chỉnh sửa cuối:
Upvote 0
nhưng ý của mình là nếu có 10 trường thì tự tách thành 10 sheet khác nhau cơ không phải chọn như bạn ( để mính gửi về các trường mà). Bạn sửa giúp mình nhé.
Mình sẽ hướng dẫn từ xa, bạn làm theo mình tuần tự như sau:

(*) Đến cột [iA] của trang 'Sum' & nhập như trong bảng sau:

Ma | HS trường
Voi|TT Vôi
DDuc|Dương Đức
TDinh|Tân Dĩnh
. . . |. . .
TLuc| Tiên Lục
(*) Tiếp theo bạn tạo ra các trang tính có tên như ở cột 'HZ' mà bạn vừa nhập;

(*) Bạn copy rieng cái macro này đè lên cái cũ của nó:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [l2]) Is Nothing Then
   Dim Sh As Worksheet, ShName As String, sRng As Range
   
   LocTruong
   Set sRng = Range("IA1:IA99").Find([l2].Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then ShName = sRng.Offset(, -1).Value
   
   Set Sh = Sheets(ShName)
   Sh.[B4].CurrentRegion.Offset(1, 1).ClearContents
   [ic1].CurrentRegion.Offset(1).Copy Destination:=Sh.[B5]
   Sh.Select
 End If
End Sub
Bạn sẽ thấy là nó chép đến trang biểu thị của trường đó, một khi bạn chọn trường trong [L2]

Những mong không fải gởi file đính kèm cho bạn & chúc thắng lợi.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn bạn! Mình đã làm được rồi, nhưng mình vẫn chưa ưng ý lắm vì ý của mình là: mới đầu mình chỉ có 1 sheet tổng hợp danh sách ( mình cũng không biết nó gồm bao nhiêu trường) mình muốn nó tự đếm xem trong danh sách có bao nhiêu trường và tách danh sách đó ra thành các sheet khác nhau theo tên trường "chỉ bằng 1 nút nhấn thôi" không phải chọn từng trường. Nghĩa là nó phải tự tạo số sheet bằng đúng số trường có trong danh sách. và nếu có thể thì đặt tên sheet theo tên trường hoặc là theo tên mặc định cũng được.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình làm được rồi, nhưng mình vẫn chưa ưng ý lắm vì ý của mình là: mới đầu mình chỉ có 1 sheet tổng hợp danh sách ( mình cũng không biết nó gồm bao nhiêu trường) mình muốn nó tự đếm xem trong danh sách có bao nhiêu trường và tách danh sách đó ra thành các sheet khác nhau theo tên trường "chỉ bằng 1 nút nhấn thôi" không phải chọn từng trường. Nghĩa là nó phải tự tạo số sheet bằng đúng số trường có trong danh sách. và nếu có thể thì đặt tên sheet theo tên trường hoặc là theo tên mặc định cũng được.

Hoàn toàn có thể được, theo chu trình sau:

(1) Tạo danh sách duy nhất của cột tên Trường (từ 'E' sang 'IA') ;
Tên trang tính không nên có khoảng trắng hay tiếng Việt có dấu; Nên bạn fải chấp nhận tên các trang tính fát sinh sẽ là 2 hoặc 3 ký tự đầu của tên trường. (Chắc việc này sẽ fải nhờ hàm trợ giúp)
Hàm tự tạo này sẽ ghi vô cột 'HZ' các ký tự cần thiết đó;

(2) Tạo các trang tính theo danh sách có từ cột 'HZ' nêu trên;

(3) Tạo vòng lặp duyệt theo cột 'IA' để chép dữ liệu vô các trang hình thành.

Từng khâu mình nêu đã có trên diễn đàn; Việc tìm & gom lại thành kết quả là fần việc của bạn.
(Nếu chịu khó tìm sẽ ra, còn không thì hỏi & chịu khó nghe các câu lằm bằm thì xong thôi)

Chúc thành công!
 
Upvote 0
Hoàn toàn có thể được, theo chu trình sau:

(1) Tạo danh sách duy nhất của cột tên Trường (từ 'E' sang 'IA') ;
Tên trang tính không nên có khoảng trắng hay tiếng Việt có dấu; Nên bạn fải chấp nhận tên các trang tính fát sinh sẽ là 2 hoặc 3 ký tự đầu của tên trường. (Chắc việc này sẽ fải nhờ hàm trợ giúp)
Hàm tự tạo này sẽ ghi vô cột 'HZ' các ký tự cần thiết đó;

(2) Tạo các trang tính theo danh sách có từ cột 'HZ' nêu trên;

(3) Tạo vòng lặp duyệt theo cột 'IA' để chép dữ liệu vô các trang hình thành.

Từng khâu mình nêu đã có trên diễn đàn; Việc tìm & gom lại thành kết quả là fần việc của bạn.
(Nếu chịu khó tìm sẽ ra, còn không thì hỏi & chịu khó nghe các câu lằm bằm thì xong thôi)

Chúc thành công!
Cảm ơn bạn. nhưng mình bây giờ mới bắt đầu tiếp xúc với VBA nên bạn nói như vậy thì khó quá. Bạn có thể viết giúp mình để từ đó mình học hỏi dần không?
 
Upvote 0
Một lần thôi đó nha & vẫn là [L2]

Cảm ơn bạn. nhưng mình bây giờ mới bắt đầu tiếp xúc với VBA nên bạn nói như vậy thì khó quá. Bạn có thể viết giúp mình để từ đó mình học hỏi dần không?

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [l2]) Is Nothing Then
   Dim Sh As Worksheet, ShName As String, sRng As Range
   
   Columns("B:J").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "L1:L2"), CopyToRange:=Range("IC1:IK1"), Unique:=False
   TaoSheets
   Set sRng = Range("IA1:IA99").Find([l2].Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then ShName = sRng.Offset(, -1).Value
   
   Set Sh = Sheets(ShName)
   [B2].CurrentRegion.Copy Destination:=Sh.[A4]
   Sh.[B4].CurrentRegion.Offset(1, 1).ClearContents
   [ic1].CurrentRegion.Offset(1).Copy Destination:=Sh.[B5]
   Sh.Range("A" & Sh.[B65500].End(xlUp).Row + 1).Resize(Sh.[A4]. _
      CurrentRegion.Rows.Count).ClearContents
   With Sh.[B2]
      .Value = [HX1].Value & " " & [l2].Value
      .Font.Bold = True:            .Font.Size = 14
      .Resize(, 8).Merge
   End With
   Sh.Select:                       Set Sh = Nothing
 End If
End Sub

Mã:
[B]Sub TaoSheets()[/B]
 Dim Cls As Range, Rng As Range
 
 Set Rng = Range("HZ2:HZ" & [iA65500].End(xlUp).Row)
 On Error Resume Next
 For Each Cls In Rng
   If SheetExist(Cls.Value) = False Then _
    Sheets.Add.Name = Cls.Value
 Next Cls
[B]End Sub[/B]
 

File đính kèm

  • GPE.rar
    14.1 KB · Đọc: 128
Upvote 0
Cách của bạn concogia đúng là cái mình cần , nhưng mình bấm nút nó không có chạy gì hết vậy bạn ? bạn xem lại dùm mình với .
Sẵn tiện bạn hướng dẫn mình cách làm một chút chút hoặc nếu mình có nhiều lớp hơn hay làm cho các khối khác thì phải làm sao . Bạn giúp mình với , mình rất mong tin .

Có bạn nào làm ơn giúp mình với . Mình là thành viên mới , hàm và Vb mình chưa biết nhiều , những quy định về diễn đàn này mình cũng chưa biết nhiều , mài mò lắm mình mới tạo được trang này để nhờ mọi người giúp đỡ nhưng có bạn cũng vào đây để hỏi , đáp những vấn đề khác mà mình thì mù tịt , còn cái mình hỏi thì các bạn quên mất tiêu rồi . buồn quá sá buồn luôn . Có bạn nào biết giúp mình xem file bạn concogia sao nó không chạy vậy ? Sẵn tiện hướng dẫn mình cách làm một chút chút hoặc nếu mình có nhiều lớp hơn hay làm cho các khối khác thì phải làm sao . Các bạn giúp mình với , mình rất mong tin và cám ơn các bạn rất nhiều .
File bạn concogia gởi nè mình bấm nút nhưng nó không chạy :
 

File đính kèm

  • lop ve sheet1111.rar
    27.5 KB · Đọc: 57
Lần chỉnh sửa cuối:
Upvote 0
Có bạn nào làm ơn giúp mình với . Mình là thành viên mới , hàm và Vb mình chưa biết nhiều , những quy định về diễn đàn này mình cũng chưa biết nhiều , mài mò lắm mình mới tạo được trang này để nhờ mọi người giúp đỡ nhưng có bạn cũng vào đây để hỏi , đáp những vấn đề khác mà mình thì mù tịt . Có bạn nào biết giúp mình xem file bạn concogia sao nó không chạy . Sẵn tiện hướng dẫn mình cách làm một chút chút hoặc nếu mình có nhiều lớp hơn hay làm cho các khối khác thì phải làm sao . Các bạn giúp mình với , mình rất mong tin và cám ơn các bạn rất nhiều .
File bạn concogia gởi :

File vẫn chạy bình thường. Nếu không chạy có lẻ bạn vào Menu Tools -> Macro -> Security.. -> tích chọn Low sau đó Thóa Excel và mở lại file đó xem sao
 
Upvote 0
Web KT

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

Back
Top Bottom