Tách Sheet và định dạng theo Form mẩu (1 người xem)

Liên hệ QC

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

File đính kèm

Upvote 0
Cám ơn anh đã giúp đỡ, những em muốn sử dụng VBA cho tốc độ nhanh hơn do dữ liệu của em tương đối nhiều.
Với lại cách của anh thì phải điền tên của từng bộ phận ở dòng trên cùng
Đương nhiên VBA không khó. Nếu muốn bạn có thể dùng 1 cách đơn giản là filter bộ phận rồi copy. Cách này dễ nhất. Tôi tin với 1 bộ phận bạn chỉ mất dưới 5s để thực hiện.
 
Upvote 0
Đương nhiên VBA không khó. Nếu muốn bạn có thể dùng 1 cách đơn giản là filter bộ phận rồi copy. Cách này dễ nhất. Tôi tin với 1 bộ phận bạn chỉ mất dưới 5s để thực hiện.

Dạ, đúng là fillter từng bộ phận rồi copy thì cũng không chậm lắm, nhưng em muốn có thể sử dụng VBA để học hỏi thêm,
Rất mong được anh giúp đỡ.
Trân trọng!
 
Upvote 0
Dạ, đúng là fillter từng bộ phận rồi copy thì cũng không chậm lắm, nhưng em muốn có thể sử dụng VBA để học hỏi thêm,
Rất mong được anh giúp đỡ.
Trân trọng!
Đành vậy! Bạn chạy macro 2 nhé!! Code chỉ đơn giản là record rồi thêm vào vòng lặp For next thôi!!
 

File đính kèm

Upvote 0
Chạy code => Code tự tạo 1 file mới và có các sheet như bạn mong muốn...& File mới chưa lưu, bạn thích save ở đâu thì cứ việc...%#^#$%#^#$%#^#$
Lưu ý: Tên sheet chỉ cho phép độ dài (LEN) 31 ký tự, nên có 1 bộ phận gì đó dài quá nên tên phía sau sẽ khuyết...Cho nên đã làm dữ liệu mà muốn đặt tên sheet theo bộ phận thì lưu ý cái việc đặt tên không được quá dài...

Mã:
Option Explicit
Public Sub GPE()
Dim Arr, dArr, I As Long, J As Long, K As Long, X As Long, TCong(1 To 1, 1 To 19)
Dim ShMau As Worksheet, ShDs As Worksheet, Wb As Workbook
Dim Dic As Object, Tem As String
Application.ScreenUpdating = False
Set Wb = ActiveWorkbook
Set ShMau = Wb.Sheets("Form")
Set ShDs = Wb.Sheets("DaTa")
Arr = ShDs.Range("A13", ShDs.Range("A65000").End(4)).Resize(, 28).Value2
ReDim dArr(1 To UBound(Arr), 1 To 26)
Set Dic = CreateObject("Scripting.Dictionary")
ShMau.Copy
For I = 1 To UBound(Arr)
If Arr(I, 1) <> Empty Then
    Tem = Arr(I, 28)
    If Not Dic.exists(Tem) Then
        Dic.Add Tem, ""
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    With ActiveSheet
        .Name = Left(Tem, 31)
        K = 0
        For X = 1 To UBound(Arr)
        If Arr(X, 1) <> Empty Then
            If Arr(X, 28) = Tem Then
                K = K + 1
                    dArr(K, 1) = Arr(X, 1)
                    dArr(K, 2) = K
                For J = 3 To 26
                    dArr(K, J) = Arr(X, J)
                Next J
                For J = 1 To 19
                    TCong(1, J) = TCong(1, J) + Arr(X, J + 6)
                Next J
            End If
        End If
        Next X
        If K > 2 Then .Rows("13:" & K + 10).Insert Shift:=xlDown
        .Range("A12").Resize(K, 26).Value = dArr
        .Range("G11").Resize(, 19).Value = TCong
        .Range("A3").Value = "C" & ChrW(7910) & "A" & Tem
    End With
    End If
Sheets(1).Activate
End If
Next I
Sheets(1).Delete
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
Anh ơi, em chay code bị lỗi out of memory
 
Upvote 0
Gì vầy trời...Tôi cũng xài 2016....Hay bạn áp dụng code vào file khác...có nhiều dữ liệu hơn chăng? Chẳng nhẻ dữ liệu của bạn vài trăm ngàn dòng???
Không em chạy code trên file của anh đính kèm luôn
Em cũng thử chạy trên máy khác cùng cơ quan, nhưng vẫn bị lỗi.
Báo lỗi tại dòng này
[GPECODE=vb]Arr = ShDs.Range("A13", ShDs.Range("A65000").End(4)).Resize(, 28).Value2[/GPECODE]

Mong được anh giúp đỡ
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom