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
Minh chạy đ­uoc mà. bạn xem lại chế độ bảo vê. vào Tools/macro/succurity/chọn low­­­­­­­­­­­­ ­­­­­­­
 
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ò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 :
Híc, mình rất thông cảm với bạn, thế này nhé:
1- Bạn cứ làm theo hướng dẫn của bạn viehoai thì file đó sẽ chạy thôi
2- Nếu bạn có nhiều lớp hơn thì sửa lại tí trong code, trong bài số lớp của bạn là 8 nên code For i= 1 to 8 nếu "bi" giờ số lớp của bạn (thí dụ) là 15 thì sửa thành For i = 1 to 15
Mã:
Dim Ws As Worksheet, i, J As Integer
        For J = 1 To 8
            Set Ws = Sheets("6." & J)
             ........
3- Làm cho các khối khác: điều kiện bắt buộc là cấu trúc bảng phải giống nhau, chỉ khác danh sách, tên lớp ( 6/1 ==> 7/1, 8/1.....) tên sheet (6.1==> 7.1, 7.2, 8.1, .....)
Mã:
With Range([a1], [a1000].End(xlUp)).Resize(, 15)
                        .AutoFilter Field:=15, Criteria1:="6/" & J
                        .SpecialCells(xlCellTypeVisible).Copy Ws.[A7]
                        .AutoFilter
                End With
Bạn sửa chỗ này: .AutoFilter Field:=15, Criteria1:="6/" & J số 6 thành 7 hoặc 8, 9
Mong bạn thành công
Cuối cùng, nếu bạn không sửa được thì gởi hết lên đi mình làm giúp cho
Thân
 
Upvote 0
Thì ra là vậy , nó chạy rồi , mình rất thích . cám ơn bạn viehoai rất nhiều !
Nhưng các bạn ơi ! Mình nhập thêm lớp nữa 6/9 , 7/1 , 8/2 ... thì nó không chạy những lớp đó . Vậy các bạn giúp mình làm cho nó chạy ra hết luôn , nhập mấy lớp thì nó tự động tạo ra mấy lớp nhe các bạn . Mình đang rất cần , đang rất mong tin . Mình cám ơn các bạn thật nhiều !
 
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, 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]
Bạn làm như vậy thật đúng ý của mình!
Xin chân thành cảm ơn các bạn, Mình nhờ bạn chỉnh lại giúp mình một chút nữa đó là khi các sheet mới được tạo thành nó không được định dạng vừa với dữ liệu trong ô, do vậy mình lại phải mất công chỉnh từng sheet một rất mất thời gian, bạn thêm cho mình đoạn code tự động căn chỉnh dữ liệu vào để sau khi dừ liệu được coppy tới sheet mới nó tự động căn chỉnh vừa với dữ liệu trong ô đó.
Tiện thể bạn cho mình hỏi bạn tạo chỗ : Noname.jpg có phải là sử dụng validation để tạo không, hướng dẫn mình với ( mình mới bắt đầu học excel bạn thông cảm) để mình thực thành trên một file khác nhé. Xin cảm ơn.

Mình hỏi thêm chút: Làm như bạn thì mình vẫn phải biết trong danh sách của mình gồm những trường nào phải không. Mình thấy bạn có chỗ: Noname 1.jpg để ghi tên các trường có trong danh sách?
"Bạn đừng giận nhé mình hỏi hơi nhiều nhỉ?""Đang học mà"? " Mình cũng rất thích học sinh của mình hỏi nhiều đấy" hihi
 
Lần chỉnh sửa cuối:
Upvote 0
Híc, mình rất thông cảm với bạn, thế này nhé:
1- Bạn cứ làm theo hướng dẫn của bạn viehoai thì file đó sẽ chạy thôi
2- Nếu bạn có nhiều lớp hơn thì sửa lại tí trong code, trong bài số lớp của bạn là 8 nên code For i= 1 to 8 nếu "bi" giờ số lớp của bạn (thí dụ) là 15 thì sửa thành For i = 1 to 15
Mã:
Dim Ws As Worksheet, i, J As Integer
        For J = 1 To 8
            Set Ws = Sheets("6." & J)
             ........
3- Làm cho các khối khác: điều kiện bắt buộc là cấu trúc bảng phải giống nhau, chỉ khác danh sách, tên lớp ( 6/1 ==> 7/1, 8/1.....) tên sheet (6.1==> 7.1, 7.2, 8.1, .....)
Mã:
With Range([a1], [a1000].End(xlUp)).Resize(, 15)
                        .AutoFilter Field:=15, Criteria1:="6/" & J
                        .SpecialCells(xlCellTypeVisible).Copy Ws.[A7]
                        .AutoFilter
                End With
Bạn sửa chỗ này: .AutoFilter Field:=15, Criteria1:="6/" & J số 6 thành 7 hoặc 8, 9
Mong bạn thành công
Cuối cùng, nếu bạn không sửa được thì gởi hết lên đi mình làm giúp cho
Thân

Mình cám ơn bạn concogia rất nhiều ! Về tăng thêm lớp 6 mình làm được rối , còn khối lớp 7 , 8 , 9 : có phải là muốn làm khối khác mình phải copy thành file khác rồi mới sửa số 6 thành số 7 hay 8 ... không bạn ? Nếu như vậy mình thấy cũng được nhưng hơi bất tiện vì mình có vài cái tổng hợp ở cuối danh dách mỗi lớp và cả tổng hợp toàn trường nữa . Bạn có cách nào làm cho nó chạy ra hết luôn , nhập mấy lớp thì nó chạy ra mấy lớp luôn nha bạn .
 
Upvote 0
Bạn làm như vậy thật đúng ý của mình!
Mình nhờ bạn chỉnh lại giúp mình một chút nữa đó là (3) khi các sheet mới được tạo thành nó không được định dạng vừa với dữ liệu trong ô, do vậy mình lại phải mất công chỉnh từng sheet một rất mất thời gian, bạn thêm cho mình đoạn code tự động căn chỉnh dữ liệu vào để sau khi dừ liệu được coppy tới sheet mới nó tự động căn chỉnh vừa với dữ liệu trong ô đó.
Tiện thể bạn cho mình hỏi bạn tạo chỗ :(1) View attachment 49682 có phải là sử dụng validation để tạo không, hướng dẫn mình với ( mình mới bắt đầu học excel bạn thông cảm) để mình thực thành trên một file khác nhé. Xin cảm ơn.

Mình hỏi thêm chút: (2) Làm như bạn thì mình vẫn phải biết trong danh sách của mình gồm những trường nào phải không. Mình thấy bạn có chỗ: View attachment 49683 để ghi tên các trường có trong danh sách?
"Bạn đừng giận nhé mình hỏi hơi nhiều nhỉ?""Đang học mà"? " Mình cũng rất thích học sinh của mình hỏi nhiều đấy" hihi
(1) Fải đó bạn; Bạn bấm chọn ô đó & vô menu Data -> Validation sẽ biết ngay mà.
(2) Trong file mình có tằng bạn 1 macro này:
PHP:
Sub DSTruong()
 Sheets("Sum").Select
 Columns("E:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
   "IA1"), Unique:=True
End Sub
Nò sẽ tạo ra danh sách các trường duy nhất mà bạn đã thấy tại cột 'IA'.
(Cần nói thêm rằng cột trái liền kề cũng dùng để tạo tên các trang tính đó nha.
Nếu muốn nghiên cứu sâu thêm, bạn cần xem hàm tự tạo để tạo ra cột 'HZ' này)

(3) Mình chưa biết bạn định dạng trang tính mới sẽ như thế nào. Lẽ đó mình chỉ có thể đề nghị bạn thêm vô dòng lệnh sau dòng End With câu lệnh sau:
PHP:
   Sh.Columns("A:J").EntireColumn.AutoFit
(Bạn thêm vô macro có trong trang 'Sum' đó nha.)

Nếu muốn định dạng khác, bạn fải đưa mẫu lên
Chúc thành công!
 
Upvote 0
Mình cám ơn bạn concogia rất nhiều ! Về tăng thêm lớp 6 mình làm được rối , còn khối lớp 7 , 8 , 9 : có phải là muốn làm khối khác mình phải copy thành file khác rồi mới sửa số 6 thành số 7 hay 8 ... không bạn ? Nếu như vậy mình thấy cũng được nhưng hơi bất tiện vì mình có vài cái tổng hợp ở cuối danh dách mỗi lớp và cả tổng hợp toàn trường nữa . Bạn có cách nào làm cho nó chạy ra hết luôn , nhập mấy lớp thì nó chạy ra mấy lớp luôn nha bạn .
Không nhất thiết phải như vậy đâu bạn, nếu ý bạn muốn thiết kế dữ liệu như vậy mình đề nghị 2 cách:
Thí dụ trường bạn 4 khối có 45 lớp , bạn tạo 45 sheet cho các lớp ( 6.1, 6.2.....7.5, 7.6.....9.4..vv)
1- Một sheet chứa danh sách toàn trường, tạo 4 nút ( khối 6, 7, 8, 9) trên sheet đó , muốn đưa về khối nào thì chọn nút về khối đó
2- Tạo 4 sheet (KHOI 6, KHOI 7 ...) muốn đưa danh sách về khối nào thì chọn khối tương ứng
Tất cả dữ liệu nằm chung trong 1 file, cấu trúc dữ liệu trong các sheet đồng nhất rất thuận tiện cho bạn thống kê các loại trên đời
Hy vọng bạn tạo được bảng dữ liệu như ý
 
Upvote 0
Không nhất thiết phải như vậy đâu bạn, nếu ý bạn muốn thiết kế dữ liệu như vậy mình đề nghị 2 cách:
Thí dụ trường bạn 4 khối có 45 lớp , bạn tạo 45 sheet cho các lớp ( 6.1, 6.2.....7.5, 7.6.....9.4..vv)
1- Một sheet chứa danh sách toàn trường, tạo 4 nút ( khối 6, 7, 8, 9) trên sheet đó , muốn đưa về khối nào thì chọn nút về khối đó
2- Tạo 4 sheet (KHOI 6, KHOI 7 ...) muốn đưa danh sách về khối nào thì chọn khối tương ứng
Tất cả dữ liệu nằm chung trong 1 file, cấu trúc dữ liệu trong các sheet đồng nhất rất thuận tiện cho bạn thống kê các loại trên đời
Hy vọng bạn tạo được bảng dữ liệu như ý

Cám ơn bạn concogia ! Mình thích cách làm một sheet chứa danh sách toàn trường, tạo 4 nút ( khối 6, 7, 8, 9) trên sheet đó , muốn đưa về khối nào thì chọn nút về khối đó . Nhưng mình chưa biết làm 4 cái nút , bạn hướng dẫn mình một chút chút về cách làm cái nút với . Bạn làm mẫu cho mình , mình gởi file cho bạn , bạn làm dùm mình nha . mình cám ơn bạn thật nhiều !

Gởi file nhờ bạn làm dùm 4 cái nút nha :
 

File đính kèm

  • DS HS THCS.rar
    51.8 KB · Đọc: 56
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Không nhất thiết phải như vậy đâu bạn, nếu ý bạn muốn thiết kế dữ liệu như vậy mình đề nghị 2 cách:
Thí dụ trường bạn 4 khối có 45 lớp , bạn tạo 45 sheet cho các lớp ( 6.1, 6.2.....7.5, 7.6.....9.4..vv)
1- Một sheet chứa danh sách toàn trường, tạo 4 nút ( khối 6, 7, 8, 9) trên sheet đó , muốn đưa về khối nào thì chọn nút về khối đó
2- Tạo 4 sheet (KHOI 6, KHOI 7 ...) muốn đưa danh sách về khối nào thì chọn khối tương ứng
Tất cả dữ liệu nằm chung trong 1 file, cấu trúc dữ liệu trong các sheet đồng nhất rất thuận tiện cho bạn thống kê các loại trên đời
Hy vọng bạn tạo được bảng dữ liệu như ý[/QUOTE

Cám ơn bạn concogia ! Mình thích cách làm một sheet chứa danh sách toàn trường, tạo 4 nút ( khối 6, 7, 8, 9) trên sheet đó , muốn đưa về khối nào thì chọn nút về khối đó . Nhưng mình chưa biết làm 4 cái nút , bạn hướng dẫn mình một chút chút về cách làm cái nút với . Bạn làm mẫu cho mình , mình gởi file cho bạn , bạn làm dùm mình nha . mình cám ơn bạn thật nhiều !

Gởi file nhờ bạn làm dùm 4 cái nút nha :
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
 

File đính kèm

  • DS HS THCS1111.rar
    75.4 KB · Đọc: 112
Upvote 0
Mình có file Ap.xls yêu cầu như bạn thanhtungpt1 , mình đã xử lý theo công thức này nhưng nó chạy không đủ theo yêu cầu lọc.(Dữ liệu chỉ có ở sheet DL và 6T).
Đây là file mình gửi kèm, nhờ bạn giao_nguyenthat sửa công thức dùm , mình cần lắm.Cảm ơn trước!
 

File đính kèm

  • Ap1.rar
    192.5 KB · Đọc: 70
Upvote 0
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

Mình đã thử lại rồi , và đã thử làm một file tương tự , kết quả nó chạy rất tốt . Như ý mình muốn luôn .

Mình cám ơn bạn rất nhiều . concogia number one !
 
Upvote 0
Mình làm xong file thì bạn cũng đã OK. Thôi thì cứ gửi tham khảo nha
Riêng nguyen trunghoa thì không có lớp thì biết đâu mà chép.

P/s: Mình để sót số TT rồi, thông cảm nha.
 

File đính kèm

  • DS HS THCS1111.rar
    59 KB · Đọc: 124
Lần chỉnh sửa cuối:
Upvote 0
File này không nên xài công thức; Bạn thử với macro này xem sao:

Mình có file Ap.xls yêu cầu như bạn thanhtungpt1 , mình đã xử lý theo công thức này nhưng nó chạy không đủ theo yêu cầu lọc.(Dữ liệu chỉ có ở sheet DL và 6T).
Đây là file mình gửi kèm, nhờ bạn giao_nguyenthat sửa công thức dùm , mình cần lắm.Cảm ơn trước!
PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [c1]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range, Sht As Worksheet
   Dim ShName As String, MyAdd As String
   Dim Col As Byte, eRw As Long
   
   Set Rng = Range([c2], [C28]):          Set Sh = Sheets("DL")
   eRw = Sh.[c65500].End(xlUp).Row
   Set sRng = Rng.Find([c1].Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then Set Sht = Sheets(sRng.Offset(, -2).Value)
   Set Rng = Sh.Range(Sh.[e4], Sh.[E65500].End(xlUp))
   Col = Sh.[e4].CurrentRegion.Columns.Count
   Sht.[b5].Resize(eRw, Col).ClearContents
   Set sRng = Rng.Find([c1].Value)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         With Sht.[B65500].End(xlUp).Offset(1).Resize(, Col)
            .Value = Sh.Cells(sRng.Row, "B").Resize(, Col).Value
         End With
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
 Sht.Select:                              Set Sht = Nothing
End Sub

Hướng dẫn sử dụng:

(*) Bạn đến trang tính 'Main' & chọn 1 trong các năm tại [C1]
(*) Ngay sau đó bạn sẽ được đưa tới trang tính có dữ liệu được chép từ 'DL' sang đầy đủ.

Nếu ưng thuận, ta sẽ còn tiếp đến hoàn chỉnh!
 

File đính kèm

  • GPE.rar
    136.5 KB · Đọc: 108
Upvote 0
Minh có 1 file tương tự nhờ các bạn giúp dùm , mình cần gấp lắm!
Xin đính kèm theo sau đây:
 

File đính kèm

  • Ap1.rar
    192.5 KB · Đọc: 39
Upvote 0
Minh có 1 file tương tự nhờ các bạn giúp dùm , mình cần gấp lắm!
Xin đính kèm theo sau đây:

Đáng lẽ bạn hướng dẫn cụ thể 1 chút thì khi làm xong đỡ sửa đi sửa lại.
-Tạo va chép thành các sheet theo độ tuổi? Trong dữ liệu có cả 1 tuổi trở lên, vậy báo cáo từ độ tuổi nào?
-Kết quả là toàn bộ các cột hay chỉ có 1 số cột nào đó? (Nếu có mẫu báo cáo thì tiện nhất)
-KHi dùng xong thì xóa toàn bộ các sheet báo cáo cho nhẹ file. Khi cần nhấn nút thì lại có?
-Những sheet nào bắt buộc có và cái nào có thể xóa?
 
Upvote 0
Bạn thử file này xem sao.
 

File đính kèm

  • DS_HSPT.rar
    126.8 KB · Đọc: 132
Upvote 0
Mình làm xong file thì bạn cũng đã OK. Thôi thì cứ gửi tham khảo nha
Riêng nguyen trunghoa thì không có lớp thì biết đâu mà chép.

P/s: Mình để sót số TT rồi, thông cảm nha.

Mình đã xem file bạn gởi , cách của bạn làm nó rất chuyên nghiệp , nó chạy cực tốt , mình rất thích thú .
cám ơn bạn rất nhiều !
 
Upvote 0
Thấy bác Sealand giúp mọi người nhiệt tình quá. Mình cũng xin nhờ ké chút.
Mình có một file và các sheet. muốn tổng hợp lên một sheet nhưng theo 2 điện kiện. cụ thể như trong file kèm theo
 

File đính kèm

  • tong hop cac sheet .rar
    100.9 KB · Đọc: 84
Upvote 0
Mình cũng nhào vô giúp ké 1 fát!

Bác Sealand giúp nhiệt tình quá. Mình xin nhờ ké chút.
Mình có một file và các sheet. muốn tổng hợp lên một sheet nhưng theo 2 điện kiện. cụ thể như trong file kèm theo
Bạn thử xài macro sau:
PHP:
Option Explicit
Sub CapNhatDuLieu()
 Dim Rng As Range, sRng As Range, Rng0 As Range
 Dim Sh, Dat As Date
 Dim ProductName As String, MyAdd As String
 
 If Selection.Value = "" Then Exit Sub
 Set Rng = Selection.EntireRow:           Dat = [A3].Value
 Set sRng = Rng.Find("TOTAL", , xlFormulas, xlPart)
 If Not sRng Is Nothing Then
   ProductName = sRng.End(xlUp).Value
   Set Rng0 = Cells(sRng.Row, "D").Resize(, 9)
 Else
   ProductName = Cells(Rng.Row, "C").Value
   Set Rng = Cells(Rng.Row, "C").Resize(99)
   Set sRng = Rng.Find("TOTAL")
   If Not sRng Is Nothing Then Set Rng0 = Cells(sRng.Row, "D").Resize(9)
 End If
 Set Sh = Sheets("SUMMARY")
 Set Rng = Sh.Range(Sh.[A4], Sh.[A65500].End(xlUp))
 Set sRng = Rng.Find(ProductName, , , xlWhole)
 If Not sRng Is Nothing Then
   MyAdd = sRng.Address
   Do
      If Month(sRng.Offset(, 1).Value) = Month(Dat) Then
         Cells(sRng.Row, "C").Resize(, 9).Value = 0
      End If
      Set sRng = Rng.FindNext(sRng)
   Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
End Sub
Cách dùng:

(Mình đã gán fím tắc cho macro này tổ hợp {CTRL}+{SHIFT}+C)

Sau khi sửa số liệu hay nhập mới (Trong trường hợp nhập mới đã fải có dòng TOTAL . . ." ở cột 'C') & con trỏ chuột đang trên dòng nào đó có dữ liệu cần cập nhật vô trang 'Summary', ta bấm tổ hợp fím để macro cập nhất số liệu sang 'Summary' cho bạn. (Tất nhiên ô kích hoạt fải là ô đang chứa dữ liệu)

Ví dụ (1) ta cần sửa dữ liệu tại [D19] của 'MAY' thành 90; Sau khi sửa & {ENTER} xong (Trỏ chuột có thể đang ở [D20]) ta bấm tổ hợp fím nóng nêu trên & sang trang 'Summary' để xem kết quả.

VD2 tại trang 'JUL' ta nhập dữ liệu vài dòng vô sau các dòng 4 & nhập công thức tổng ở dòng 27. Sau đó để trỏ chuột trên 1 ô trong vùng từ 'D27:L27' có dữ liệu & bấm tổ hợp fím thân thương.

Chúc vui!
 

File đính kèm

  • GPE.rar
    107.8 KB · Đọc: 62
Chỉnh sửa lần cuối bởi điều hành viên:
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.
 

File đính kèm

  • tong hop cac sheet .rar
    108.5 KB · Đọc: 91
Upvote 0
Web KT

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

Back
Top Bottom