Xin giúp đỡ macro tách file theo cột

Liên hệ QC

nthxe

Trình còi
Tham gia
14/6/08
Bài viết
259
Được thích
112
Xin chào các bác, em có việc cần các bác giúp như sau:

Em có 1 file excel gồm các cột: Họ và tên/ ngày tháng năm sinh/ lớp/ điểm toán/ điểm văn

Em muốn tách file chung trên thành các file nhỏ theo các tiêu chí: file theo lớp, file theo điểm môn toán, file theo điểm môn văn.

Em nhờ các bác giúp em cái code trên. Theo như những lần trước bạn em code hộ, em đề xuất file như thế này được không ạ?

(1) Chạy file macro
(2) kích vào nút chọn file thì hiện 1 hộp thoại để chọn đến file cần tách
(3) sau khi chọn được file chung (chỉ có 1 sheet) thì có hộp thoại tiếp theo chọn cột (theo thứ tự cột) để tách file theo các giá trị của cột đó
(4) các file tách ra được lưu cùng thư mục với file chung.

Em cảm ơn các bạn
 

File đính kèm

  • GPE_nhogiupdo.xlsx
    9 KB · Đọc: 11
Xin chào các bác, em có việc cần các bác giúp như sau:

Em có 1 file excel gồm các cột: Họ và tên/ ngày tháng năm sinh/ lớp/ điểm toán/ điểm văn

Em muốn tách file chung trên thành các file nhỏ theo các tiêu chí: file theo lớp, file theo điểm môn toán, file theo điểm môn văn.

Em nhờ các bác giúp em cái code trên. Theo như những lần trước bạn em code hộ, em đề xuất file như thế này được không ạ?

(1) Chạy file macro
(2) kích vào nút chọn file thì hiện 1 hộp thoại để chọn đến file cần tách
(3) sau khi chọn được file chung (chỉ có 1 sheet) thì có hộp thoại tiếp theo chọn cột (theo thứ tự cột) để tách file theo các giá trị của cột đó
(4) các file tách ra được lưu cùng thư mục với file chung.

Em cảm ơn các bạn
Xem đúng y bạn chưa nhé
Mã:
Sub TachLop()
    Dim xRCount As Long
    Dim xSht As Worksheet
    Dim xNSht As Worksheet
    Dim I As Long
    Dim xTRrow As Integer
    Dim xCol As New Collection
    Dim xTitle As String
    Dim xSUpdate As Boolean
    Set xSht = ActiveSheet
    Call XoaSheet
    On Error Resume Next
    xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
    xTitle = "A1:E1"
    xTRrow = xSht.Range(xTitle).Cells(3).Row
    For I = 2 To xRCount
        Call xCol.Add(xSht.Cells(I, 3).Text, xSht.Cells(I, 3).Text)
    Next
    xSUpdate = Application.ScreenUpdating
    Application.ScreenUpdating = False
    For I = 1 To xCol.Count
        Call xSht.Range(xTitle).AutoFilter(3, CStr(xCol.Item(I)))
        Set xNSht = Nothing
        Set xNSht = Worksheets(CStr(xCol.Item(I)))
        If xNSht Is Nothing Then
            Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
            xNSht.Name = CStr(xCol.Item(I))
        Else
            xNSht.Move , Sheets(Sheets.Count)
        End If
        xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
        xNSht.Columns.AutoFit
    Next
    xSht.AutoFilterMode = False
    xSht.Activate
    Application.ScreenUpdating = xSUpdate
End Sub
Bài đã được tự động gộp:

Xin chào các bác, em có việc cần các bác giúp như sau:

Em có 1 file excel gồm các cột: Họ và tên/ ngày tháng năm sinh/ lớp/ điểm toán/ điểm văn

Em muốn tách file chung trên thành các file nhỏ theo các tiêu chí: file theo lớp, file theo điểm môn toán, file theo điểm môn văn.

Em nhờ các bác giúp em cái code trên. Theo như những lần trước bạn em code hộ, em đề xuất file như thế này được không ạ?

(1) Chạy file macro
(2) kích vào nút chọn file thì hiện 1 hộp thoại để chọn đến file cần tách
(3) sau khi chọn được file chung (chỉ có 1 sheet) thì có hộp thoại tiếp theo chọn cột (theo thứ tự cột) để tách file theo các giá trị của cột đó
(4) các file tách ra được lưu cùng thư mục với file chung.

Em cảm ơn các bạn
À nhầm rồi tách file chứ không phai tách sheet
 

File đính kèm

  • GPE_nhogiupdo.xlsm
    28.9 KB · Đọc: 9
Upvote 0
em cảm ơn bác, code của bác đã hoạt động ổn ạ. Việc tách dữ liệu từ file chung thành file con bọn em sẽ phải thực hiện nhiều. Bác có thể cho tùy biến việc chọn cột để tách không ạ? nếu được theo trình tự như trên thì tốt quá bác ơi.

(1) Chạy file macro
(2) kích vào nút chọn file thì hiện 1 hộp thoại để chọn đến file cần tách
(3) sau khi chọn được file chung (chỉ có 1 sheet) thì có hộp thoại tiếp theo chọn cột (theo thứ tự cột) để tách file theo các giá trị của cột đó
(4) các file tách ra được lưu cùng thư mục với file chung.
 
Upvote 0
em cảm ơn bác, code của bác đã hoạt động ổn ạ. Việc tách dữ liệu từ file chung thành file con bọn em sẽ phải thực hiện nhiều. Bác có thể cho tùy biến việc chọn cột để tách không ạ? nếu được theo trình tự như trên thì tốt quá bác ơi.

(1) Chạy file macro
(2) kích vào nút chọn file thì hiện 1 hộp thoại để chọn đến file cần tách
(3) sau khi chọn được file chung (chỉ có 1 sheet) thì có hộp thoại tiếp theo chọn cột (theo thứ tự cột) để tách file theo các giá trị của cột đó
(4) các file tách ra được lưu cùng thư mục với file chung.
Có nghĩa là gộp các sheet từ nhiều file riêng lẻ gộp lại thành 1 file duy nhất xong sẽ tiến hành tách ra các file riêng lẻ: lớp, điểm văn, điểm toán.
 
Upvote 0
Mình tách từ trang tổng (số liệu) thành 1 trang danh sách báo cáo với nhiều tiêu chí chọn khác nhau;
Chuyện tách thành những file nhỏ xin nhường bạn!
PHP:
Dim Col As Integer
Dim Arr(1 To 299, 1 To 7)
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim sArr()
 Dim J As Long, Rws As Long, Cot As Byte, W As Integer
 
 If Not Intersect(Target, [L1]) Is Nothing Then
    With Sheets("GPE")
        If Left(Target.Value, 1) = "L" Then
            .Range("A2:A37").Copy Destination:=.[d2]
            .[k2:K3].Value = .[L2:L3].Value
             [L2].Value = Space(o):                     Col = 5
        ElseIf Left(Target.Value, 1) = "M" Then
            .[k2:K3].Value = .[M2:m3].Value
            .Range("Diem").Copy Destination:=.[d2]
        End If
    End With
 ElseIf Not Intersect(Target, [L2]) Is Nothing Then
    If Left(Target.Value, 1) = "T" Then
        Col = 6
    ElseIf Left(Target.Value, 1) = "V" Then
        Col = 7
    End If
 ElseIf Not Intersect(Target, [L3]) Is Nothing Then
    [A6:G300].Value = ""
    If Col Then
        With Sheets("HSHS")
            Rws = .[A2].CurrentRegion.Rows.Count
            sArr() = .[A2].Resize(Rws, 7).Value
        End With
        For J = 1 To UBound(sArr())
            If sArr(J, Col) = Target.Value Then
                W = W + 1:              Arr(W, 1) = W
                For Cot = 2 To 7
                    Arr(W, Cot) = sArr(J, Cot)
                Next Cot
            End If
        Next J
        If W Then
            [a6].Resize(W, 7).Value = Arr()
        End If
    End If
 End If
End Sub
 

File đính kèm

  • GiaoDuc.rar
    47.2 KB · Đọc: 15
Upvote 0
Web KT
Back
Top Bottom