Sắp xếp và tính tổng (1 người xem)

Liên hệ QC

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

Tham gia
14/9/12
Bài viết
312
Được thích
68
Nghề nghiệp
VT
Em đang tập sửa 1 code mà anh BaTê làm cho, để dùng vào mục đích khác. Nhưng có nhiều chỗ em không biết bỏ đi cái gì. Em gửi lên đây xin nhờ a/c GPE sửa lại giùm em.
Em có Sheet3 là Sheet chứa dữ liệu, em muốn sắp xếp dữ liệu ấy rồi tính tổng tại Sheet4. Cụ thể em muốn kết quả giống như trong Shẹẹt5
 

File đính kèm

Em đang tập sửa 1 code mà anh BaTê làm cho, để dùng vào mục đích khác. Nhưng có nhiều chỗ em không biết bỏ đi cái gì. Em gửi lên đây xin nhờ a/c GPE sửa lại giùm em.
Em có Sheet3 là Sheet chứa dữ liệu, em muốn sắp xếp dữ liệu ấy rồi tính tổng tại Sheet4. Cụ thể em muốn kết quả giống như trong Shẹẹt5

Chạy Sub này thử xem:
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim sArr(), dArr(), I As Long, J As Long, K As Long
Dim Tong1 As Long, Tong2 As Long, STT As Long, Cong As String
Cong = "C" & ChrW(7897) & "ng:"
With Sheet3
    sArr = .Range(.[B4], .[B4].End(xlDown)).Resize(, 7).Value
End With
With Sheet4
    With .[A3:H60000]
        .ClearContents
        .Borders.LineStyle = 0
        .Interior.ColorIndex = 0
        .Font.Bold = False
        .Font.ColorIndex = 0
    End With
    .[B3].Resize(UBound(sArr, 1), 7) = sArr
    .[B3].Resize(UBound(sArr, 1), 7).Sort Key1:=.[G3], Key2:=.[D3]
    sArr = .Range(.[B2], .[B3].End(xlDown).Offset(1)).Resize(, 7).Value
    ReDim dArr(1 To UBound(sArr, 1) * 2, 1 To 8)
    For I = 2 To UBound(sArr, 1) - 1
        K = K + 1: STT = STT + 1
        dArr(K, 1) = STT
        For J = 1 To 7
            dArr(K, J + 1) = sArr(I, J)
        Next J
        Tong1 = Tong1 + sArr(I, 4)
        Tong2 = Tong2 + sArr(I, 5)
        If sArr(I + 1, 3) <> sArr(I, 3) Then
            K = K + 1
            dArr(K, 3) = Cong
            dArr(K, 5) = Tong1: Tong1 = 0
            dArr(K, 6) = Tong2: Tong2 = 0
        End If
    Next I
    .[A3].Resize(K, 8) = dArr
    .[A3].Resize(K, 8).Borders.LineStyle = 1
    For I = 1 To UBound(dArr, 1)
        If dArr(I, 3) = Cong Then
            .Range("A" & I + 2).Resize(, 8).Interior.ColorIndex = 6
            .Range("C" & I + 2).Resize(, 4).Font.Bold = True
            .Range("C" & I + 2).Resize(, 4).Font.ColorIndex = 3
        End If
    Next I
End With
End Sub
 
Upvote 0
Chạy Sub này thử xem:
PHP:
Public Sub GPE()
............
End Sub

Em xin cảm ơn anh. Em Hài lòng rồi anh ạ.
Cho em hỏi thêm 1 chút. Ví thử nếu muốn khi hết 1 người thuộc cột thuộc G thì đặt thêm 1 dòng tổng cho người đó và cuối cùng cho 1 dòng tổng chung có phức tạp lắm không? Nếu đơn giản xin anh sửa giúp em, còn phức tạp thì em không dám làm phiền anh nữa. Một lần nữa xin được cảm ơn anh ạ.
 
Upvote 0
Em xin cảm ơn anh. Em Hài lòng rồi anh ạ.
Cho em hỏi thêm 1 chút. Ví thử nếu muốn khi hết 1 người thuộc cột thuộc G thì đặt thêm 1 dòng tổng cho người đó và cuối cùng cho 1 dòng tổng chung có phức tạp lắm không? Nếu đơn giản xin anh sửa giúp em, còn phức tạp thì em không dám làm phiền anh nữa. Một lần nữa xin được cảm ơn anh ạ.

Thêm một chút cho nặng nề thêm thôi mà.
 

File đính kèm

Upvote 0
Em xin cảm ơn anh. Em Hài lòng rồi anh ạ.
Cho em hỏi thêm 1 chút. Ví thử nếu muốn khi hết 1 người thuộc cột thuộc G thì đặt thêm 1 dòng tổng cho người đó và cuối cùng cho 1 dòng tổng chung có phức tạp lắm không? Nếu đơn giản xin anh sửa giúp em, còn phức tạp thì em không dám làm phiền anh nữa. Một lần nữa xin được cảm ơn anh ạ.
Nếu là mình thì mình dùng PIVOT TABLE
 

File đính kèm

Upvote 0
Thêm một chút cho nặng nề thêm thôi mà.

Thật tuyệt vời. Em rất cảm ơn anh.
Em ở tỉnh lẻ, ở đây không có lớp dạy VBA nên toàn đang tự mò. Thấy các anh chị viết Code em thèm lắm, em đang cố để hiểu và sửa được những cái lặt vặt trong Code. Xin chúc anh và diễn đàn 1 ngày vui vẻ. Xin cảm ơn
 
Upvote 0
Thêm một chút cho nặng nề thêm thôi mà.

File này em sưu tầm trên GPE
Em đã nhập số liệu của em đang sử dụng
Em muốn ghép đoạn code của #4 vào đây để khi bấm thì nó sẽ sắp xếp và tính tổng cho các cột có số, đếm số dịch vụ trên cột D tại các Sheet vừa được tách ra giống như file #4. Mà chẳng biết làm thế nào, em xin trợ giúp gửi lên các anh GPE
Đoạn code #4 của anh BaTê đây ạ:
Public Sub GPE()
Application.ScreenUpdating = False
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Total1 As Long, Total2 As Long
Dim Tong1 As Long, Tong2 As Long, STT As Long, Cong As String, Tong3 As Long, Tong4 As Long
Cong = "C" & ChrW(7897) & "ng"
With Sheet3
sArr = .Range(.[B4], .[B4].End(xlDown)).Resize(, 7).Value
End With
With Sheet4
With .[A3:H60000]
.ClearContents
.Borders.LineStyle = 0
.Interior.ColorIndex = 0
.Font.Bold = False
.Font.ColorIndex = 0
End With
.[B3].Resize(UBound(sArr, 1), 7) = sArr
.[B3].Resize(UBound(sArr, 1), 7).Sort Key1:=.[G3], Key2:=.[D3]
sArr = .Range(.[B2], .[B3].End(xlDown).Offset(1)).Resize(, 7).Value
ReDim dArr(1 To UBound(sArr, 1) * 2, 1 To 8)
For I = 2 To UBound(sArr, 1) - 1
K = K + 1: STT = STT + 1
dArr(K, 1) = STT
For J = 1 To 7
dArr(K, J + 1) = sArr(I, J)
Next J
Tong1 = Tong1 + sArr(I, 4)
Tong2 = Tong2 + sArr(I, 5)
Tong3 = Tong3 + sArr(I, 4)
Tong4 = Tong4 + sArr(I, 5)
Total1 = Total1 + sArr(I, 4)
Total2 = Total2 + sArr(I, 5)
If sArr(I + 1, 3) <> sArr(I, 3) Then
K = K + 1
dArr(K, 3) = Cong
dArr(K, 5) = Tong1: Tong1 = 0
dArr(K, 6) = Tong2: Tong2 = 0
End If
If sArr(I + 1, 6) <> sArr(I, 6) Then
K = K + 1
dArr(K, 4) = Cong & " " & sArr(I, 6)
dArr(K, 5) = Tong3: Tong3 = 0
dArr(K, 6) = Tong4: Tong4 = 0
End If
Next I
K = K + 1
dArr(K, 3) = Cong & " Chung"
dArr(K, 5) = Total1
dArr(K, 6) = Total2
.[A3].Resize(K, 8) = dArr
.[A3].Resize(K, 8).Borders.LineStyle = 1
.Range("A" & K + 2).Resize(, 8).Interior.ColorIndex = 22
.Range("A" & K + 2).Resize(, 8).Font.Bold = True
For I = 1 To UBound(dArr, 1) - 1
If dArr(I, 3) = Cong Or Left(dArr(I, 4), 4) = Cong Then
.Range("A" & I + 2).Resize(, 8).Interior.ColorIndex = IIf(dArr(I, 3) = Cong, 20, 6)
.Range("C" & I + 2).Resize(, 4).Font.Bold = True
.Range("C" & I + 2).Resize(, 4).Font.ColorIndex = 3
End If
Next I
End With
End Sub
 

File đính kèm

Upvote 0
File này em sưu tầm trên GPE
Em đã nhập số liệu của em đang sử dụng
Em muốn ghép đoạn code của #4 vào đây để khi bấm thì nó sẽ sắp xếp và tính tổng cho các cột có số, đếm số dịch vụ trên cột D tại các Sheet vừa được tách ra giống như file #4. Mà chẳng biết làm thế nào, em xin trợ giúp gửi lên các anh GPE
Đoạn code #4 của anh BaTê đây ạ:
------------------
Không biết cột nào có số thì tính tổng cột nào? Đưa dữ liệu giống "giỡn" quá vậy ta?
Đếm cái gì, cột nào, rồi ghi kết quả đếm vào đâu?
Ít nhất phải làm kết quả mẫu muốn có vào 1 sheet nào đó mọi người mới biết chứ.
 
Upvote 0
file bạn ấy đưa lên e thấy cột A có số đấy anh , chắc bạn ấy nhờ anh tính tổng cho cột A
 
Upvote 0
Cột S và cột I vẫn là trống rỗng, xếp cái gì? Giỡn vui thiệt.
Tạm biệt nhé.

Em sơ ý quá, sắp xếp theo cột T rồi cột J anh ạ. Thứ lỗi cho em vì file gốc khi bấm tách không có cột STT, sau khi chèn thêm cột STT, nó đẩy lùi lại 1 cột anh ạ. Anh thông cảm cho em nhé.
 
Upvote 0
Em sơ ý quá, sắp xếp theo cột T rồi cột J anh ạ. Thứ lỗi cho em vì file gốc khi bấm tách không có cột STT, sau khi chèn thêm cột STT, nó đẩy lùi lại 1 cột anh ạ. Anh thông cảm cho em nhé.

Sub cũ của bạn có sẵn tách sheet không có cột STT.
Tôi viết tiếp Sub cho nút Sắp xếp theo yêu cầu thôi.
Muốn sử dụng chung 1 nút thì dồn 3 Sub vào 1 nút lệnh.
Chú ý các cột ngày tháng phải nhập đúng kiểu. Nếu không nó ra kết quả "tào lao" ráng chịu.
PHP:
Public Sub GPE_SX()
Dim Ws As Worksheet, sArr(), dArr(), Tong(1 To 1, 1 To 9), I As Long, J As Long
Dim K As Long, R As Long, Rws As Long, Cong As String, Dichvu As String
Cong = "C" & ChrW(7897) & "ng: "
Dichvu = " d" & ChrW(7883) & "ch v" & ChrW(7909) & "."
For Each Ws In Worksheets
    If Ws.Name <> "Tong hop" Then
        With Ws
            R = .[A65536].End(xlUp).Row
            .Range("A6:S" & R).Sort Key1:=.[S6], Key2:=.[I6]
            sArr = .Range(.[A6], .[A65536].End(xlUp).Offset(1)).Resize(, 19).Value
            ReDim dArr(1 To UBound(sArr, 1) * 3, 1 To 19)
            For I = 1 To UBound(sArr, 1) - 1
                Rws = Rws + 1
                K = K + 1
                For J = 1 To 19
                    dArr(K, J) = sArr(I, J)
                Next J
                For J = 1 To 3
                    Tong(1, J) = Tong(1, J) + sArr(I, J + 14)
                    Tong(1, J + 3) = Tong(1, J + 3) + sArr(I, J + 14)
                    Tong(1, J + 6) = Tong(1, J + 6) + sArr(I, J + 14)
                Next J
                If sArr(I, 9) <> sArr(I + 1, 9) Then
                    K = K + 1
                    dArr(K, 9) = Cong & sArr(I, 9) & " " & Rws & Dichvu
                    .Range("A" & K + 5).Resize(, 19).Interior.ColorIndex = 20
                    For J = 1 To 3
                        dArr(K, J + 14) = Tong(1, J)
                        Tong(1, J) = 0
                    Next J
                    Rws = 0
                End If
                If sArr(I, 19) <> sArr(I + 1, 19) Then
                    K = K + 1
                    dArr(K, 10) = Cong & sArr(I, 19)
                    .Range("A" & K + 5).Resize(, 19).Interior.ColorIndex = 6
                    For J = 1 To 3
                        dArr(K, J + 14) = Tong(1, J + 3)
                        Tong(1, J + 3) = 0
                    Next J
                End If
            Next I
            K = K + 1
            dArr(K, 11) = "TOTAL:"
            For J = 1 To 3
                dArr(K, J + 14) = Tong(1, J + 6)
                Tong(1, J + 6) = 0
            Next J
            With .[A6].Resize(K, 19)
                .Value = dArr
                .Borders.LineStyle = 1
                .Font.ColorIndex = 0
            End With
            .Range("A6").Offset(K - 1).Resize(, 19).Interior.ColorIndex = 22
        End With
        K = 0
   End If
Next Ws
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
.Em xin dừng yêu cầu này. Cảm ơn các a/c đã quan tâm
 
Lần chỉnh sửa cuối:
Upvote 0
Em xin cảm ơn anh ạ. Cho em hỏi thêm tý nhé.

1. Anh ơi em muốn dòng các dòng tổng đó đậm lên thì chèn thêm dòng thế nào vào chỗ nào ạ. Ngoài ra em muốn copy tên tiêu đề ở bảng Tong hop sang làm tiêu đề cho các sheet vừa tách ra cộng thêm với tên sheet đó làm tiêu đề cho sheet tách ra đó thì làm thế nào. Vì mỗi lầm bấm nút GPE nó cập nhật, lại bị mất tiêu đề bảng anh ạ.

2. Trong quá trình nhập liệu đôi khi cần chèn thêm dòng trống để nhập, mà code tách sheet chỉ tách khi không có dòng trống. Vậy để chắc chắn em đã chèn thêm 1 code xóa dòng trống vào để trước khi bấm nút GPE (sắp xếp đó), nhưng nếu khi không còn dòng trống mà bấm nút xóa dòng - thì nó kéo dài nút bấm ra là làm sao vậy anh và cách khắc phục thế nào.

3. Sub tách sheet không có cột STT (cái này có sửa được không anh)

4. Chú ý các cột ngày tháng phải nhập đúng kiểu. Nếu không nó ra kết quả "tào lao" ráng chịu. - Chỗ này em chưa hiểu lắm, em vẫn thấy đúng mà.
Công việc này có khi bỏ phần tách sheet và làm theo hướng tạo các sheet phụ sau đó chèn code cập nhật có khi hay hơn nhỉ. Anh cho em xin góp ý nhé.
Một lần nữa chân tình cảm ơn anh, và các anh chị cộng đồng GPE đã quan tâm giúp đỡ.

tôi không biết bạn xóa dòng trống để làm gì nhưng tôi thấy việc đó không giúp ích gì và ngược lại đã làm cho code chạy sai bét luôn
lưu ý : dòng chứa tên cột (STT,mã DV,....) trong sheet tổng hợp phải luôn là dòng số 4
việc xóa sheet trước rồi tạo lại đúng cái sheet đó thật là lãng phí . vì sao ?
tạo sheet riêng cho từng DV là để xem . muốn xem thì cần format các cột cho đẹp mà xem , rồi lại freeze pane ,....
xóa sheet rồi lại thao tác lại từ đầu ?
tôi gởi lên cái file này bạn xem thử . nhớ là nó sẽ không xóa sheet mỗi lần bấm nút , nó chỉ xóa trống các cell từ dòng 6 trở lên rồi ghi cái mới . như thể format cell hay freeze pane không bị mất cho lần sau
 

File đính kèm

Upvote 0
Trước tiên em xin cảm ơn các a/c đã giúp đỡ. Em xin các anh chị không trợ giúp yêu cầu #15 của em nữa.
Em đã copy code #14 sang file này. Code hoạt động rất tốt, trừ 1 việc là sao em chèn được thêm dòng code lấy chữ đậm cho dòng tính tổng nhưng không lấy được màu chữ.
Ngoài ra em cũng loay hoay bổ xung điền dòng tổng mà không có kết quả. a/c nào giúp em phần này với.
Em cảm ơn các a/c ạ.
 

File đính kèm

Upvote 0

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

Back
Top Bottom