Tính tổng cho nhiều dãy số (1 người xem)

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

vuacudem

Thành viên mới
Tham gia
5/11/13
Bài viết
46
Được thích
1
mình đang phải làm bảng tính tổng của nhiều dãy số, mình có đính kèm file, mình muốn tính tổng ở các dòng tô màu vàng, mà ko phải dùng chuột kéo từng cột 1. Vì bảng tính của mình dài tới 3000 dòng, có dãy nhiều đoạn ngắn dài khác nhau, đều có điểm trung là ở cột F có những mã số giống nhau. các bạn giúp mình với.
 
mình đang phải làm bảng tính tổng của nhiều dãy số, mình có đính kèm file, mình muốn tính tổng ở các dòng tô màu vàng, mà ko phải dùng chuột kéo từng cột 1. Vì bảng tính của mình dài tới 3000 dòng, có dãy nhiều đoạn ngắn dài khác nhau, đều có điểm trung là ở cột F có những mã số giống nhau. các bạn giúp mình với.
Theo như File bạn gửi tôi thấy các mã giống nhau có đặc điểm chung đều là 5 mã nên tôi viết code như sau:
Mã:
Public Sub Tinh_tong()
Dim i As Long, rng As Range
Set rng = Range[COLOR=#ff0000][B]("F1:H30")[/B][/COLOR]
    For i = 6 To rng.Rows.Count Step 6
        rng(i, 2).FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
        rng(i, 3).FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
    Next i
End Sub
Nếu như cấu trúc File thực của bạn mà khác File bạn đã gửi lên thì hồi âm lại, tôi sẽ nghĩ cách khác cho.
Chỗ màu đỏ là vùng chứa dữ liệu cần tính tổng, tùy biến cho phù hợp nhé!
 

File đính kèm

Nếu 3000 dòng thì thay vì chèn 7, 8 trăm dòng vàng vàng, hãy dùng chức năng Subtotal của Excel. Nhớ là không phải dùng hàm subtotal, mà là chức năng.

rng(i, 2).FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
rng(i, 3).FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"

sao không gói lại 1 dòng lệnh, gán công thức cho nhiều ô 1 lúc?
 
Nếu 3000 dòng thì thay vì chèn 7, 8 trăm dòng vàng vàng, hãy dùng chức năng Subtotal của Excel. Nhớ là không phải dùng hàm subtotal, mà là chức năng.



sao không gói lại 1 dòng lệnh, gán công thức cho nhiều ô 1 lúc?
Hy vọng là đúng ý của thầy! Mong thầy góp ý!
Mã:
Public Sub Tinh_tong2()
Dim i As Long, rng As Range, cll As Range
Set rng = Range([COLOR=#ff0000][B]"G1:H30"[/B][/COLOR])
    For Each cll In rng
           If cll = "" Then cll.FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
    Next cll
End Sub
P/S: Chú ý chỗ đỏ đỏ để tùy biến nhé bạn!
 
Lần chỉnh sửa cuối:
Hy vọng là đúng ý của thầy! Mong thầy góp ý!
P/S: Chú ý chỗ đỏ đỏ để tùy biến nhé bạn!
Vẫn không phải gán công thức 1 lần cho nhiều ô (thí dụ 2 ô cùng dòng)
Thế nếu không phải lúc nào cũng 5 ô thì sao?
 
Lần chỉnh sửa cuối:
Vẫn không phải gán công thức 1 lần cho nhiều ô (thí dụ 2 ô cùng dòng)
Thế nếu không phải lúc nào cũng 5 ô thì sao?
Em vẫn chưa nghĩ ra được, mong thầy đừng cười! Quả thật đầu em lúc này đang mụ quá! Xin thầy cho em xin đáp án để học tập ạ!
 
Vấn đề 1:
Hãy thử dòng lệnh sau rồi áp dụng:
Range("G5:H5") = 10

Vấn đề 2:
Sau khi gán công thức 1 dòng, ghi nhớ dòng đó. Tới dòng cần ghi công thức kế tiếp, ngó lại số cũ để xài, ghi lại số mới để lần sau xài

Thế nên ở topic bên kia anh siwtom mới nói: Dictionary (các cấu trúc lệnh nói chung) ai cũng có thể biết và thậm chi học thuộc. Nhưng Với mỗi bài toán cụ thể đều cần phải tư duy tìm ra thuật toán. Có thuật toán rồi mới quyết định dùng cấu trúc lệnh nào.
 
Lần chỉnh sửa cuối:
Vấn đề 1:
Hãy thử dòng lệnh sau rồi áp dụng:
Range("G5:H5") = 10

Vấn đề 2:
Sau khi gán công thức 1 dòng, ghi nhớ dòng đó. Tới dòng cần ghi công thức kế tiếp, ngó lại số cũ để xài, ghi lại số mới để lần sau xài

Thế nên ở topic bên kia anh siwtom mới nói: Dictionary (các cấu trúc lệnh nói chung) ai cũng có thể biết và thậm chi học thuộc. Nhưng Với mỗi bài toán cụ thể đều cần phải tư duy tìm ra thuật toán. Có thuật toán rồi mới quyết định dùng cấu trúc lệnh nào.
Em nghĩ dòng lệnh đỏ đỏ phía trên phải là:
Range("G6:H6")=10
chứ ạ?
 
Em nghĩ dòng lệnh đỏ đỏ phía trên phải là:
Range("G6:H6")=10
chứ ạ?
Tôi cho 1 ví dụ. Ví dụ chỉ là ví dụ. Và tôi nói rõ là "để áp dụng", chứ 5, 6, 7; 10, 20, 30, ... không biết áp dụng thì chỉ đến vậy thôi.
 
Em lần đầu tiên làm code có gì anh chị bỏ qua cho em nhé
không biết thế này đã được chưa ạ.
Sub test()

Dim i As Long, arr, tmp
arr = Sheet2.Range("G1:H18").Value
For i = 1 To UBound(arr, 2)
For j = 1 To UBound(arr)
If arr(j, i) = "" Then
arr(j, i) = tmp
tmp = 0
Else
tmp = tmp + arr(j, i)
End If
Next
Next
Sheet2.Range("G1:H18") = arr
End Sub
 
Nếu dùng VBA thì thử Macro này
Mã:
Sub Macro1()
    On Error Resume Next
    Range("f1:h" & [h65000].End(3).Row + 1).SpecialCells(4) = "=SUMIF(R1C6:R[-1]C6,R[-1]C6,R1C)"
End Sub
 
Lần chỉnh sửa cuối:
thank các bạn đã giúp đỡ mình. nhưng mình ko hiểu lắm về code :( mình có gửi file gốc lên và hình ảnh để các bạn xem giúp mình.

bảng tính của cơ quan mình như sau: ở sheet file gốc là nguyên bải (mình chỉ copy 100 dòng, vi file của mình tới >3000) sheet tiếp là mình làm thủ công, nhung với 3000 dòng, và còn các biểu tương tự, làm = tay thi rất lâu.

Yêu cầu là sắp xếp từ cột D -> M thứ trong cột từ nhỏ đến lớn, mình đã hide bớt các cot phía sau. Tiếp tới insert row có giá trị ko giống nhau, insert = chuot nhiều dòng quá :(( rồi tinh tổng ở cột P -> AT mà vừa mới insert. những dòng tính tổng đó tô chữ màu đỏ. Cuối cùng là filter các dòng đã tính tổng đề mình copy số liệu.

Mong các bạn hướng dẫn và nghĩ cách giúp mình với, mình còn nhiều biểu như vậy quá :(( tính tổng - insert nhanh và filter các dòng tô vàng đó :(



View attachment 123517
 
Lần chỉnh sửa cuối:
Yêu cầu là sắp xếp từ cột D -> M thứ trong cột từ nhỏ đến lớn, mình đã hide bớt các cot phía sau. Tiếp tới insert row có giá trị ko giống nhau, insert = chuot nhiều dòng quá :(( rồi tinh tổng ở cột P -> AT mà vừa mới insert. những dòng tính tổng đó tô chữ màu đỏ. Cuối cùng là filter các dòng đã tính tổng đề mình copy số liệu.
Tôi đã nói ngay từ đầu: Dùng subtotal, khỏi insert dòng mà vẫn có dòng tổng, và sau đó có sẵn group, khỏi cần filter luôn.
 
Tôi đã nói ngay từ đầu: Dùng subtotal, khỏi insert dòng mà vẫn có dòng tổng, và sau đó có sẵn group, khỏi cần filter luôn.

Mình ko biết cách sử dụng subtotal. bạn hướng dẫn mình với. mình thấy khó là từ cột D -> M là săp xếp giá trị, nhưng tính tổng thì ở cột P, tính tổng ở những row có giá trị ko giống nhau nữa. bạn cho mình xin hướng dẫn cụ thể với.
 
Rõ khổ, loay hoay cả tuần giờ lại trở lại điểm xuất phát !

Cách sử dụng Subtotan
1- Chọn vùng dữ liệu. Vd: bôi đen toàn bộ cột D đến cột U.
2- Vào Menu Data, chọn lệnh Subtotan.
3- Các lựa chọn trong hộp thoại Subtotan
- Trong Textbox At each change in - Chọn tên vùng (cột) chứa sự thay đổi mà ta chọn làm điều kiện để chèn dòng tổng. Vd: maduan.
- Trong Textbox Us function - Chọn hàm sử dụng. Vd: Sum
- Trong Textbox Add subtotan to - Chọn cột điền kết quả. Bấm mũi tên lên, xuống để chọn tên cột và tích vào hộp kiểm.
4- Nhấn OK để xem kết quả.
Nếu chưa vừa ý thì làm lại với các lựa chọn mong muốn trong 3 Textbox trên.
 
Rõ khổ, loay hoay cả tuần giờ lại trở lại điểm xuất phát !

Cách sử dụng Subtotan
1- Chọn vùng dữ liệu. Vd: bôi đen toàn bộ cột D đến cột U.
2- Vào Menu Data, chọn lệnh Subtotan.
3- Các lựa chọn trong hộp thoại Subtotan
- Trong Textbox At each change in - Chọn tên vùng (cột) chứa sự thay đổi mà ta chọn làm điều kiện để chèn dòng tổng. Vd: maduan.
- Trong Textbox Us function - Chọn hàm sử dụng. Vd: Sum
- Trong Textbox Add subtotan to - Chọn cột điền kết quả. Bấm mũi tên lên, xuống để chọn tên cột và tích vào hộp kiểm.
4- Nhấn OK để xem kết quả.
Nếu chưa vừa ý thì làm lại với các lựa chọn mong muốn trong 3 Textbox trên.

mình đã làm theo như bạn hướng dẫn, nhưng mình thấy ở chỉ tính đc tổng theo những mã giống nhau ở cột D. nhưng còn row có giá trị khác nhau lại ko đc tính tổng row 1-2 giống nhau, row 3, 4 khác nhau. bạn xem giúp mình với, còn nhiều row bên dưới nữa.

View attachment 123652
 

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

Back
Top Bottom