Code copy từ sheet Tổng hợp sang các sheet con khác tương ứng theo mã sp (1 người xem)

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

phamhau299

Thành viên mới
Tham gia
10/3/11
Bài viết
40
Được thích
1
Mình có 1 sheet tổng hợp (Total) tổng hợp tất cả các công đoạn của các mã sp
hàng tháng những mã nào sản xuất sẽ copy các công đoạn của sheet Total bỏ vào sheet tháng đó.
Những mã sp sản xuất hàng tháng có sẵn, chỉ vào sheet Total copy bỏ qua sheet Tháng đó
Ví dụ trong Tháng 10 có mã DBK987TE, sẽ vào sheet Total copy công đoạn của mã đó bỏ vào sheet Thang10
Những mã nào không có trong sheet Total , thì sẽ đánh số 0 vào

Mình upload lên web không được, vì nó cứ báo lỗi hoài
nên mình upload lên treng mediafire
các bạn vào xem giúp mình

http://www.mediafire.com/download/1ts93tz43tyhajz/Total.rar
 
Mình có 1 sheet tổng hợp (Total) tổng hợp tất cả các công đoạn của các mã sp
hàng tháng những mã nào sản xuất sẽ copy các công đoạn của sheet Total bỏ vào sheet tháng đó.
Những mã sp sản xuất hàng tháng có sẵn, chỉ vào sheet Total copy bỏ qua sheet Tháng đó
Ví dụ trong Tháng 10 có mã DBK987TE, sẽ vào sheet Total copy công đoạn của mã đó bỏ vào sheet Thang10
Những mã nào không có trong sheet Total , thì sẽ đánh số 0 vào

Mình upload lên web không được, vì nó cứ báo lỗi hoài
nên mình upload lên treng mediafire
các bạn vào xem giúp mình

http://www.mediafire.com/download/1ts93tz43tyhajz/Total.rar
Tôi chưa xem file. Nhưng như bạn nói ở trên thì nên dùng thử hàm Vlookup () xem sao.
 
Upvote 0
mình có dùng hàm vlookup nhưng rắc rối ở chỗ có mã thì 4 công đoạn, có mã 3 công đoạn, có mã 2 công đoạn...
 
Upvote 0
PHP:
Option Explicit
Sub CopyCongDoan()
 Dim Rws As Long, J As Byte:            Dim ShName As String
 Dim Sh As Worksheet, Rng As Range, sRng As Range, Cls As Range
 
 Set Sh = ThisWorkbook.Worksheets("Total")
 Set Rng = Sh.Range(Sh.[f6], Sh.[f6].End(xlDown))
 For J = 10 To 12
    ShName = "Thang" & CStr(J)
    Sheets(ShName).Select
    Rws = [a10].End(xlDown).Row
    For Each Cls In Range([a10], [a10].End(xlDown))
        Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
        With Cls.Offset(, 5)
            If sRng Is Nothing Then
                .Interior.ColorIndex = 38
                .Value = 0
                .Offset(, 1).Resize(, 5).Value = ""
            Else
                .Resize(, 6).Value = sRng.Offset(, 1).Resize(, 6).Value
            End If
        End With
    Next Cls
 Next J
End Sub
 

File đính kèm

Upvote 0
PHP:
Option Explicit
Sub CopyCongDoan()
 Dim Rws As Long, J As Byte:            Dim ShName As String
 Dim Sh As Worksheet, Rng As Range, sRng As Range, Cls As Range
 
 Set Sh = ThisWorkbook.Worksheets("Total")
 Set Rng = Sh.Range(Sh.[f6], Sh.[f6].End(xlDown))
 For J = 10 To 12
    ShName = "Thang" & CStr(J)
    Sheets(ShName).Select
    Rws = [a10].End(xlDown).Row
    For Each Cls In Range([a10], [a10].End(xlDown))
        Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
        With Cls.Offset(, 5)
            If sRng Is Nothing Then
                .Interior.ColorIndex = 38
                .Value = 0
                .Offset(, 1).Resize(, 5).Value = ""
            Else
                .Resize(, 6).Value = sRng.Offset(, 1).Resize(, 6).Value
            End If
        End With
    Next Cls
 Next J
End Sub

Cam on bạn, code rất hay
nhưng nếu cái sheet con có tên là Thang1, Thang2, Thang3.....thì sửa lại như thế nào để từ tháng 1 đến tháng 12 đều chạy được vậy bạn?
mình sửa lại For J = 1 To 12 nhưng không chạy được các tháng 1 đến 9 (do thiếu vài tháng)
(phải có đủ 12 sheet mới chạy được)
 
Lần chỉnh sửa cuối:
Upvote 0
Mình vừa thử chạy từ tháng 6 đến tháng 12 & bình thường mà!

Hay bạn lại gán tên cho những tháng <1 là thang01, thang02,. . .

Lúc đó tham biến ShName ta lại fải ghi khác đi chút mới được.
 
Upvote 0
Cam on bạn, code rất hay
nhưng nếu cái sheet con có tên là Thang1, Thang2, Thang3.....thì sửa lại như thế nào để từ tháng 1 đến tháng 12 đều chạy được vậy bạn?
mình sửa lại For J = 1 To 12 nhưng không chạy được các tháng 1 đến 9 (do thiếu vài tháng)
(phải có đủ 12 sheet mới chạy được)
Thay vì dùng For J = 1 to 12
Ta thử thế này:
PHP:
For Each sh in worksheets
   If sh.Name <> "Total" Then
       ........
   End If
Next
Thêm cái nữa là tại sao mã code sp trong sheets("Total") trùng tùm lum vậy? Hay là tại vì dữ liệu tạm???
 
Upvote 0
Thay vì dùng For J = 1 to 12
Ta thử thế này:
PHP:
For Each sh in worksheets
   If sh.Name <> "Total" Then
       ........
   End If
Next

Lỡ có sheet nào nữa ngoài "Total" và "Thang99" thì kẹt.

Muốn duyệt sheets chả có cách nào an toàn 100%. Chỉ có cách dễ chỉnh sửa thôi.

Mã:
[COLOR=#008000]Khi các sheet cần lấy không hẳn có tên chuẩn[/COLOR]

For Each shNm In Split( "Thang1,Thang2,Thang3,Thang4,Thang5,Thang6,Thang7,Thang8,Thang9,Thang10,Thang11,Thang12", ",")
Sheets.(shNm).Activate
...
Next shNm

[COLOR=#008000]Hoặc là, khi các sheet cần lấy có tên chuẩn (đều bắt đầu bằng "Thang" và một số)[/COLOR]

For Each sh in WorkSheets
If Left(sh.Name,5) = "Thang" And IsNumeric(Mid(sh.Name,6)) Then
sh.Activate
...
End If
Next sh
 
Upvote 0
Lỡ có sheet nào nữa ngoài "Total" và "Thang99" thì kẹt.

Muốn duyệt sheets chả có cách nào an toàn 100%. Chỉ có cách dễ chỉnh sửa thôi.

Mã:
[COLOR=#008000]Khi các sheet cần lấy không hẳn có tên chuẩn[/COLOR]

For Each shNm In Split( "Thang1,Thang2,Thang3,Thang4,Thang5,Thang6,Thang7,Thang8,Thang9,Thang10,Thang11,Thang12", ",")
Sheets.(shNm).Activate
...
Next shNm

[COLOR=#008000]Hoặc là, khi các sheet cần lấy có tên chuẩn (đều bắt đầu bằng "Thang" và một số)[/COLOR]

For Each sh in WorkSheets
If Left(sh.Name,5) = "Thang" And IsNumeric(Mid(sh.Name,6)) Then
sh.Activate
...
End If
Next sh
Nếu các sheet có dạng thang... thì sao mình không xài vầy cho gọn

If sh.Name like "thang" & "*" Then
 
Upvote 0

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

Back
Top Bottom