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
Bạn thử lại nhé, mình chưa xem kỹ lại đâu
Cách tạo nút:
View ==> Toolbars ==> Control Toolbox
Khi thanh công cụ hiện lên bạn thò "anh tý" vào hình cái nút bấm chọn, thò vào bảng tính vẽ cái nút, double click chép code vào là ...xong

Bạn concogia ơi ! Mình làm thử thì nó chạy ngon lắm , nhưng mình làm thiệt thì lúc đầu nó cũng chạy tốt , đến lúc gần xong thì nó báo lỗi tùm lum . Thôi mình gởi file nhờ bạn chỉnh giùm mình với nha . Nhờ bạn thêm dùm code hai cái nút DS CHUYEN ĐI và nút DS BO HOC để mình lọc qua 2 sheet CHUYEN DI và BO HOC . Còn ở các sheet từng lớp nếu có thể bạn bỏ dùm mình cột lớp nha bạn vì DS từng lớp nên mình muốn ghi phía trên tiêu đề . Bạn làm ơn giúp mình với , mình cám ơn bạn rất nhiều .

Gởi bạn file nhờ bạn chỉnh dùm :
 

File đính kèm

  • Danh Sach LY LICH HS.rar
    462.3 KB · Đọc: 93
Upvote 0
Bạn concogia ơi ! Mình làm thử thì nó chạy ngon lắm , nhưng mình làm thiệt thì lúc đầu nó cũng chạy tốt , đến lúc gần xong thì nó báo lỗi tùm lum . Thôi mình gởi file nhờ bạn chỉnh giùm mình với nha . Nhờ bạn thêm dùm code hai cái nút DS CHUYEN ĐI và nút DS BO HOC để mình lọc qua 2 sheet CHUYEN DI và BO HOC . Còn ở các sheet từng lớp nếu có thể bạn bỏ dùm mình cột lớp nha bạn vì DS từng lớp nên mình muốn ghi phía trên tiêu đề . Bạn làm ơn giúp mình với , mình cám ơn bạn rất nhiều .

Gởi bạn file nhờ bạn chỉnh dùm :
Khi copy code vào các nút bạn copy dư cái này: Option Explicit ở trên đầu, xóa mấy em đó đi là ổn
Đây là code khối 1 (thêm phần xóa cột lớp)
Mã:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
    Dim Ws As Worksheet, i, J As Integer
        For J = 1 To 6
            Set Ws = Sheets("1." & J)
            Ws.Range(Ws.[A4], Ws.[O4].End(xlDown)).Clear
                With Range([a1], [a1000].End(xlUp)).Resize(, 15)
                        .AutoFilter Field:=15, Criteria1:="1/" & J
                        .SpecialCells(xlCellTypeVisible).Copy Ws.[A4]
                        .AutoFilter
                End With
                Ws.[O:O].Delete
                    For i = 1 To Ws.Range(Ws.[B5], Ws.[B5].End(xlDown)).Rows.Count
                        Ws.Cells(i + 4, 1) = i
                    Next
         Next
   Application.ScreenUpdating = True
End Sub
Chú ý khi copy chỉ cần copy từ Application....thôi nhé
Tạo nút BOHOC, them sheet mới tên BOHOC, chép cái này vào nút BOHOC
Mã:
Private Sub CommandButton9_Click()
Application.ScreenUpdating = False
    Dim Ws As Worksheet, i As Integer
          Set Ws = Sheets("BOHOC")
            Ws.Range(Ws.[A4], Ws.[O4].End(xlDown)).Clear
                With Range([a1], [a1000].End(xlUp)).Resize(, 15)
                        .AutoFilter Field:=15, Criteria1:="BH"
                        .SpecialCells(xlCellTypeVisible).Copy Ws.[A4]
                        .AutoFilter
                End With
                    For i = 1 To Ws.Range(Ws.[B5], Ws.[B5].End(xlDown)).Rows.Count
                        Ws.Cells(i + 4, 1) = i
                    Next
   Application.ScreenUpdating = True
End Sub
Tương tự như thế khi bạn tạo nút và sheet học sinh chuyển đi ( bạn sửa: Set Ws = Sheets("BOHOC") thành Set Ws = Sheets("DI") & Criteria1:="BH" thành Criteria1:="DI" nhé)
Híc, chúc bạn làm lại ngon cơm (làm nhiều lần mới nhớ nhiều)
 
Upvote 0
Mình đã thử lại rồi hiện tại nó chạy rất ngon cơm . Một lần nữa , mình không biết nói gì hơn là cám ơn bạn concogia rất nhiều !
 
Upvote 0
Có 2 vấn đề với câu hỏi của bạn:
1/Giải quyết vấn đề cụ thể của bài: Mình viết 2 hàm rất nhỏ để giải quyết vấn đề này. Nhưng khó khăn là bạn dùng tên làm tiêu chuẩn trong khi tên rất dài tiềm ẩn sai sót làm các hàm tìm kiếm và tổng hợp theo điều kiện bị sai lệch. Ví dụ: Đố bạn 2 tên này có gì khác nhau:
Fork R Gear Shift ( 24211 - KPH - 9001) Fork R Gear Shift ( 24211 - KPH - 9001)
Do vậy, khi nhập nên dùng validation , Combobox hay chép dán chứ gõ trực tiếp e không ổn cho việc thống kê, kể cả các hàm trong 1 sheet. Mình tranh thủ viết đêm nên chưa soát hết được, bạn kiểm tra chỗ sao sai thì chắc là tên đó bị sai và dùng copy rồi paste vào thay thế tất cả các ô tên đó trên sheet tháng và sheet tổng hợp.
Hàm 1: Mình đổi CodeName các sheet tháng thành Tn. Ví dụ Sheet "Jan" thành T1
Mã:
Function Look(ByVal ch, cl1, cl2 As String, m As Date) As Double
Dim sh As Worksheet, i
Dim c As Range
Set sh = Choose(Month(m), T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
With sh.Range(cl1 & "1:" & cl1 & "500")
Set c = .Find(ch, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
If Not c Is Nothing Then
Look = sh.Cells(c.Row, cl2)
Else
Look = 0
End If
End With
End Function

Cú pháp =Look(TenSP,Cot_ten,Cot_tim,Thang_tim)

Hàm 2: Hàm Sumif cải biên:
Mã:
Function LookSum(ByVal ch As String, cl As String, m As Date) As Double
Dim sh As Worksheet, i
Set sh = Choose(Month(m), T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
i = sh.[b65536].End(xlUp).Row
LookSum = WorksheetFunction.SumIf(sh.Range("C5:C" & i), "=" & ch, sh.Range(cl & "5:" & cl & i))
End Function
Cú pháp: =LookSum(Ten,Cot_tien,Thang)

Lưu ý trong các hàm này cột là ký tự cột. ví dụ cột D nhập "D"

2/Bạn nên cải tiến File không nhập thế này mà nhập chung 1 sheet DATA sau đó sử lý các báo cáo. Nen bổ xung cột Mã SP để việc tổng hợp và sử lý dữ liệu chính xác nhất.
Cám ơn đã nhiệt tình giúp mình. Mình sẽ mã hoá tên các SP để đảm bảo độ chính xác.
 
Upvote 0
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 :
bạn thử xem file coi có đúng ý không nhé
CẢ CÔNG THỨC VÀ PIVIOT
CÁI PIVOT TÔI CHƯA CÓ THÀNH THẠO CHO LẮM NHƯNG CHẮC LÀ ĐÁP ỨNG CHO FILE CUA BẠN ĐƯỢC
 

File đính kèm

  • Copy of DS hoc sinh.rar
    42.1 KB · Đọc: 84
Upvote 0
Chon automatic trong Option.jpg
Có 2 vấn đề với câu hỏi của bạn:
1/Giải quyết vấn đề cụ thể của bài: Mình viết 2 hàm rất nhỏ để giải quyết vấn đề này. Nhưng khó khăn là bạn dùng tên làm tiêu chuẩn trong khi tên rất dài tiềm ẩn sai sót làm các hàm tìm kiếm và tổng hợp theo điều kiện bị sai lệch. Ví dụ: Đố bạn 2 tên này có gì khác nhau:
Fork R Gear Shift ( 24211 - KPH - 9001) Fork R Gear Shift ( 24211 - KPH - 9001)
Do vậy, khi nhập nên dùng validation , Combobox hay chép dán chứ gõ trực tiếp e không ổn cho việc thống kê, kể cả các hàm trong 1 sheet. Mình tranh thủ viết đêm nên chưa soát hết được, bạn kiểm tra chỗ sao sai thì chắc là tên đó bị sai và dùng copy rồi paste vào thay thế tất cả các ô tên đó trên sheet tháng và sheet tổng hợp.
Hàm 1: Mình đổi CodeName các sheet tháng thành Tn. Ví dụ Sheet "Jan" thành T1
Mã:
Function Look(ByVal ch, cl1, cl2 As String, m As Date) As Double
Dim sh As Worksheet, i
Dim c As Range
Set sh = Choose(Month(m), T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
With sh.Range(cl1 & "1:" & cl1 & "500")
Set c = .Find(ch, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
If Not c Is Nothing Then
Look = sh.Cells(c.Row, cl2)
Else
Look = 0
End If
End With
End Function

Cú pháp =Look(TenSP,Cot_ten,Cot_tim,Thang_tim)

Hàm 2: Hàm Sumif cải biên:
Mã:
Function LookSum(ByVal ch As String, cl As String, m As Date) As Double
Dim sh As Worksheet, i
Set sh = Choose(Month(m), T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
i = sh.[b65536].End(xlUp).Row
LookSum = WorksheetFunction.SumIf(sh.Range("C5:C" & i), "=" & ch, sh.Range(cl & "5:" & cl & i))
End Function
Cú pháp: =LookSum(Ten,Cot_tien,Thang)

Lưu ý trong các hàm này cột là ký tự cột. ví dụ cột D nhập "D"

2/Bạn nên cải tiến File không nhập thế này mà nhập chung 1 sheet DATA sau đó sử lý các báo cáo. Nen bổ xung cột Mã SP để việc tổng hợp và sử lý dữ liệu chính xác nhất.

Bác ơi! tôi chọn Auto rồi sao nó không cập nhật bác nhỉ. cứ ấn F2 enter thì nó mới cập nhật. nhờ bác xem giúp
 
Upvote 0
Bạn nào giúp mình đoạn code này với : mình muốn nhấn vào nút Khoi 1 thì toàn bộ danh sách khối một sẽ copy sang sheet K1 , nút Khoi 2 thì sang sheet K2 ... mình làm hoài vẫn chưa được . mình gởi file nhờ các bạn sửa code dùm nha :
 

File đính kèm

  • DS HOCSINH.rar
    47.7 KB · Đọc: 30
Upvote 0
Làm mới cho bạn luôn

Macro này được triệu gọi từ 5 macro gắn với 5 nút lệnh của bạn

PHP:
Sub AdvFilter(Khoi As Byte)
 Dim Sh As Worksheet, eRw As Long, ShName As String
  
 eRw = [c65500].End(xlUp).Row
 Range("B1:O" & eRw).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
   "Y1:Y2"), CopyToRange:=Range("AA1:AN1"), Unique:=False
 ShName = Switch(Khoi = 1, "K1", Khoi = 2, "K2", Khoi = 3, "K3", Khoi = 4, "K4", Khoi = 5, "K5")
 Set Sh = Sheets(ShName)
 [aa1].CurrentRegion.Copy Destination:=Sh.[B2]
 Sh.Select:                      Set Sh = Nothing
 
End Sub
 

File đính kèm

  • GPEgd.rar
    60.6 KB · Đọc: 88
Upvote 0
Cám ơn bạn HYen17 rất nhiều . Quả thật cách của bạn mình đọc không hiểu lắm , vì mình dân mới tập sự , nhưng vô tình nó gợi ý cho mình thay vì chỗ Criteria1:="1/" thì phải viết Criteria1:="1/*" là OK . Nó chạy rất tốt . Mình sẽ từ từ nghiên cứu thêm về cách của bạn .Nhưng dù sau mình cũng cám ơn bạn rất nhiều .
 
Upvote 0
so sanh ngay roi copy

Mình không rành VB code, chỉ biết record macro rồi chỉnh sửa chút xíu cho phù hợp.

Mình đang có một file excel theo doĩ chi tiết hàng ngaỳ mỗi ngaỳ là 1 cột, kéo daì cho 12 tháng (file 1) nhưng report cần gủi cho sếp (file 2) chỉ cần paste value 7 cột của 7 ngaỳ gần nhất.

Có cách nào so sánh ngaỳ của từng cột trên file 1, nếu cột đó <= today+7 thì copy-paste vale qua file 2
Nhờ các bạn giúp mình viết đoạn code cho phù hợp
Rất mong nhận được phản hồi và xin cảm ơn nhiều

anguyen
 
Lần chỉnh sửa cuối:
Upvote 0
Để tránh phải sửa chữa và trọng tâm bạn nên có 1 file mẫu, bạn xoá bớt dữ liệu để nhel file nha. Trên file có sheet ghi chép hàng ngày và sheet báo cáo. Như vậy, mọi người sẽ tìm cách chép dữ liệu sang sheet báo cáo cho bạn tuỳ theo ngày báo cáo.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không rành VB code, chỉ biết record macro rồi chỉnh sửa chút xíu cho phù hợp.

Mình đang có một file excel theo doĩ chi tiết hàng ngaỳ mỗi ngaỳ là 1 cột, kéo daì cho 12 tháng (file 1) nhưng report cần gủi cho sếp (file 2) chỉ cần paste value 7 cột của 7 ngaỳ gần nhất.

Có cách nào so sánh ngaỳ của từng cột trên file 1, nếu cột đó <= today+7 thì copy-paste vale qua file 2
Nhờ các bạn giúp mình viết đoạn code cho phù hợp
Rất mong nhận được phản hồi và xin cảm ơn nhiều

anguyen

Minh gui file dinh kem, nho moi nguoi chi giup
 
Upvote 0
View attachment 51453
Để tránh phải sửa chữa và trọng tâm bạn nên có 1 file mẫu, bạn xoá bớt dữ liệu để nhel file nha. Trên file có sheet ghi chép hàng ngày và sheet báo cáo. Như vậy, mọi người sẽ tìm cách chép dữ liệu sang sheet báo cáo cho bạn tuỳ theo ngày báo cáo.

Bạn ơi, mình gửi laị file có 2 sheet, 1 sheet để theo doĩ chi tiết, 1 sheet để gửi baó caó.
Rât mong tin bạn
 
Lần chỉnh sửa cuối:
Upvote 0
Với bài của bạn thì VBA làm chi cho mệt vì công thức đã đủ rồi.
Bạn tham khảo file nha.(Chỉ cần nhập ngày, nhưng phải đúng quy định ngày tháng)
 

File đính kèm

  • Bao cao ngay.xls
    23 KB · Đọc: 39
Lần chỉnh sửa cuối:
Upvote 0
Với bài của bạn thì VBA làm chi cho mệt vì công thức đã đủ rồi.
Bạn tham khảo file nha.(Chỉ cần nhập ngày, nhưng phải đúng quy định ngày tháng)

Cảm ơn bạn, nhưng bạn ơi, mình tính lồng đoạn VB code này vô 1 đoạn VB khác để bấm nút là tự động copy- paste value vô sheet report gửi đi, nếu được nhờ bạn giúp mình đoạn code để thực hiện copy theo điều kiện trong vòng 7 ngaỳ tiếp theo kể từ ngaỳ hiện taị nhé.

Đoạn code dưới đây chỉ đơn giản là thao tác copy toàn bộ rồi paste value và paste format qua file report gửi đi. Bạn tham khaỏ nhé, rất mong nhận được sự hỗ trợ của bạn.

Sub senddailyreport()
'Macro recorded 17/08/2010 by Annq

Windows("FILE1.xls").Activate
Sheets("SHEET FILE 1").Select
Rows("3:30").Select
Selection.copy

ChDir "C:\my document"
Workbooks.Open Filename:= _
"C:\my document\FILE 2.xls"
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là file co cả báo cao công thức và báo cáo dùng VBA bạn tham khảo nhé:

Mã:
Sub Baocao()
Dim cot
Sheet3.[b4:f19].ClearContents
On Error goto thoat
cot = WorksheetFunction.Match(Sheet3.[e2], Sheet1.[a5:ag5], 0)
Sheet3.[b4:b19].Resize(, IIf(cot > 5, 5, cot - 1)) = _
Sheet1.Cells(5, cot - IIf(cot > 5, _
4, cot - 2)).Resize(16, IIf(cot > 5, 5, cot - 1)).Value
thoat:
End Sub
 

File đính kèm

  • Bao cao ngay.xls
    42.5 KB · Đọc: 49
Lần chỉnh sửa cuối:
Upvote 0
Còn đây là file phát sinh riêng và file báo cáo riêng. Khi lập báo cáo mở file báo cáo rồi nhập ngày nhấn nút báo cáo là code sẽ mở file phatsinh chép dữ liệu điền vào báo cáo.

Yêu cầu: 2 file có thể để bất cứ đâu miễn chúng cùng chung thư mục, bạn phải tải về giải nén ra ổ đĩa Code mới tìm thấy file Phat Sinh
 

File đính kèm

  • BaoCao.rar
    18.6 KB · Đọc: 57
Lần chỉnh sửa cuối:
Upvote 0
Bạn ơi, cảm ơn bạn nhiều lắm, đúng là mình đang hí hoáy làm sao để liên kết ra cái file report khác thì được bạn hướng dẫn luôn.
Cho mình hỏi thêm chút xíu
Hiện giờ, mếu muốn baó cáo từ ngaý 1/9-7/9 thì phaỉ chọn ngaỳ baó caó là ngaỳ 7/9.
Nếu mình muốn baó cáo vẩn là từ ngày 1/9-7/9 nhưng gõ vô ô màu vàng là ngày 1/9 thì phải làm sao.
Thêm một chút xíu nữa, mình muốn để cái nút tạo báo cáo ở file phát sinh để file báo cáo gửi cho sếp hết sức đơn giản và không báo macro khi mở file ra (nếu không sếp hết hồn không thèm xem báo cáo mà tưởng virut)

Mình biết là phiền bạn nhưng rất mong được tiếp tục giúp đỡ
 
Lần chỉnh sửa cuối:
Upvote 0
Việc chắc chắn sẽ dễ hơn trừ ngược. Bạn tham khảo Code để tìm hiểu đi. Mình sẽ có bài cho bạn nhưng không phải bây giờ.
Thông cảm nha, mình chỉ mong tốt cho bạn thôi.
Có 1 mẹo để sử dụng chính code không phải sửa nhiều là dòng
ng = sh1.[e2] bạn sửa thành ng = sh1.[e2] + 4
Nhưng đây không cơ bản vì code theo yêu cầu mới có thể gọn gàng hơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom