A HOANG 620
Thành viên mới

- Tham gia
- 16/1/23
- Bài viết
- 41
- Được thích
- 3
Em chưa học hai chức năng này.Dùng Pivot table, hoặc dùng chức năng Subtotal (không phải gõ hàm Subtotal)
Bấm mấy phát cũng chả sao. Chỉ là em nghiện code cho nên chỉ muốn xin code, không đếm xỉa đến bất cứ giải pháp nào khác.Bấm 1 phát thì không được, í, tải vềt nhất 2 phát
...
Cái chính là không có file thì ai mà viết code cho nổi hả chú?Bấm mấy phát cũng chả sao. Chỉ là em nghiện code cho nên chỉ muốn xin code, không đếm xỉa đến bất cứ giải pháp nào khác.
Code chỉ cần làm phần chính (lập Subtotals) thôi. Phần còn lại cứ viết đại (xác định vùng dữ liệu), chỉnh sửa sau.Cái chính là không có file thì ai mà viết code cho nổi hả chú?![]()
SORT xong thì mấy cái dòng tổng (mã trống) lên đầu. Lúc ghi kết quả thì loại chúng ra....
À mà tạo xong khi dữ liệu tăng lên phải gỡ tạo lại á anh gì ơi.
Hi, áp dụng thực tế không được vì lỗi. Mình chuyển sang vòng lặp nhưng code chỉ dùng 1 lần. Chưa có kiểm tra dòng Tổng cộng đã có:Mình không viết được vba nhưng có ý tưởng này, các bác xem có được không nhé:
Sub tinhtong()
Dim row1 ' tong so dong hien tai
Dim row2 ' tong so dong Tinh tong
Dim i
Dim j ' dong bat dau Tinh tong
j=2
Row1 = công thức
Row2 = công thức đếm các giá trị không trùng lặp từ hàng j đến row1 (điều kiện đã sắp xếp mã hàng theo thứ tự)
For i = 3 to row1 + row2
IF Range("B"&i) <> range("B"&i-1) then
1. Chèn dòng Tổng cộng, và thực hiện công thức cho các cột, Sum từ hàng j đến i-1.
2. Gán giá trị j = i+1
Next i+2
Else
Next i
End if
End sub
Bài đã được tự động gộp:
Sub Tinh_tong()
Dim ws As Worksheet
Dim lastRow As Long
Dim currentRow As Long
Dim currentItem As String
Dim itemTotal As Double
Dim itemRange As Range
Dim totalRow As Range
Set ws = ThisWorkbook.Sheets("Sheet1") 'La trang tinh tong
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
currentRow = 2 ' Dong du lieu dau tien
' Lap qua tong mat hang và tinh tong
Do While currentRow <= lastRow
currentItem = ws.Cells(currentRow, 2).Value ' Cot B la Mat hang
itemTotal = 0
' Lap qua cac hang cung mat hang
Set itemRange = Nothing
Do While currentRow <= lastRow And ws.Cells(currentRow, 2).Value = currentItem
' Cong tong cot G - gia tri can tinh
itemTotal = itemTotal + ws.Cells(currentRow, 7).Value
currentRow = currentRow + 1
Loop
' Chen dong tong cong sau khi hoan thanh viec Tinh tong cho 1 mat hang
Set totalRow = ws.Rows(currentRow)
ws.Rows(currentRow).Insert Shift:=xlDown
ws.Cells(currentRow, 2).Value = "Tong cong mat hang " & currentItem ' Chen them ten mat hang
ws.Cells(currentRow, 7).Value = itemTotal ' Gia tri
currentRow = currentRow + 1
lastRow = lastRow + 1 ' Cap nhat lai dong cuoi
Loop
End Sub
Bài #10 thì sai ko viết được, còn bài 11 mình test thử thấy vẫn đúng, có dòng code cập nhật dòng cuối sau khi chèn hàng rồi.Giải thuật bài #10 và #11 sai tét bét.
Mỗi lần chèn dòng thì phần dưới sẽ bị đẩy xuống. Cuối cùng sẽ xảy ra việc sử lý sót dữ liệu.
Ví dụ ban đầu có 100 dòng. Chèn dòng tổng ở vị trí 10 thì tất cả các dòng từ 10 đến 100 hiện tại bị đẩy xuống, dòng 100 trở thành 101. Vòng lặp chỉ chạy đên 100 (con số ban đầu) thì dừng mất đất.
Trên nguyên tắc:
Tất cả các vòng lặp chèn hay xóa dòng đều phải thực hiện từ dưới (dòng cuối) trở lên.
Có mỗi cái file giả định mà cũng không đăng lên được thì bạn muốn học hành, tập tành gì?Hay là bạn muốn người khác tạo sãn file và code sẵn cho?View attachment 307351Em cần thêm 1 dòng dưới các nhóm hàng giống nhau và tính tổng các cột tương ứng. em tính thủ công nên máy chạy chậm, lâu nữa. Nhờ anh chị viết code hộ giúp em tổng hợp dùng mãng cho chạy nhẹ hơn. Em tập tành học hỏi. em cám ơn
Bạn đã tính đến trường họp dữ liệu lộn sộn không phải là hết AA1, sau đó đến AA2 mà là đang AA1 rồi lại đến AA10 rồi lại AA5, rồi lại AA20,...Rồi mới đến AA1,....thì bạn chèn thêm dòng và ghi số tổng cộng vào liệu có hợp lý không?Bài #10 thì sai ko viết được, còn bài 11 mình test thử thấy vẫn đúng, có dòng code cập nhật dòng cuối sau khi chèn hàng rồi.