Sum có điểm dừng (2 người xem)

Liên hệ QC

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

yen_truy_van

Thành viên mới
Tham gia
12/3/08
Bài viết
4
Được thích
0
Nhờ Anh Chị giúp lập dùm công thức: tổng trong cột nhưng có điểm dừng (file đính kèm).
 

File đính kèm

Lần chỉnh sửa cuối:
yen_truy_van đã viết:
Nhờ Anh Chị giúp lập dùm công thức: tổng trong cột nhưng có điểm dừng (file đính kèm).
Bạn dùng hàm Sumif là được.
B5=SUMIF(A:A,A5,B:B)
C9=SUMIF(A:A,A9,B:B)
….
Không biết sao gủi file ko được
Bạn nhớ điền mã CV(AAA..) vào tất cả những dòng liên quan đến CV đó
VD từ dòng A5 đến A8 là AAA
 
Lần chỉnh sửa cuối:
Với bài toán này thì dùng công thức ko hay bằng VBA.. vì nếu tính 1 cách tổng quát thì ta phải làm công thức cho toàn bộ cột C, với điều kiện cột A khác rổng thì sẽ SUMIF theo cột A... như vậy sẽ quá phí...
Bạn xong file này dùng vòng lập nhé.. (Hãy sửa code lại cho đúng với thực tế)
ANH TUẤN
 

File đính kèm

Mấy anh chỉ em, em không hiểu gì hết, vì em chưa biết nhiều về công thức cũng như VBA. Xin các anh giúp trực tiếp trên file em đã gởi kèm. Cám ơn các anh nhiều, cám ơn diễn đàn luôn !!!
 
bc1: bạn mở excel rồi chọn tool-macro-security rồi bạn click vào mục "medium" đóng chương trình excel lại .
b2.bạn mở file đính kèm của anhtuan1066, khi hiện bảng thông báo"bạn click nút "enable". sau đó click nút tổngcộng trong file excel nó sẽ tự tính.

yen_truy_van đã viết:
Mấy anh chỉ em, em không hiểu gì hết, vì em chưa biết nhiều về công thức cũng như VBA. Xin các anh giúp trực tiếp trên file em đã gởi kèm. Cám ơn các anh nhiều, cám ơn diễn đàn luôn !!!
 
Với bài toán này thì dùng công thức ko hay bằng VBA.. vì nếu tính 1 cách tổng quát thì ta phải làm công thức cho toàn bộ cột C, với điều kiện cột A khác rổng thì sẽ SUMIF theo cột A... như vậy sẽ quá phí...
Bạn xong file này dùng vòng lập nhé.. (Hãy sửa code lại cho đúng với thực tế)
ANH TUẤN
Thưa thày có cách nào dùng VBA mà kết quả sau khi chạy xong, tại ô kết quả nó là công thức chứ không phải là giá trị (Value). Em ví dụ sau khi chạy VBA thì ô C11 xuất hiện công thức (=)A6+A7+A8 không ah.
 
Thưa thày có cách nào dùng VBA mà kết quả sau khi chạy xong, tại ô kết quả nó là công thức chứ không phải là giá trị (Value). Em ví dụ sau khi chạy VBA thì ô C11 xuất hiện công thức (=)A6+A7+A8 không ah.
Code cũ là:
PHP:
Sub TongCong()
  Dim Er As Integer, iM As Integer
  Er = Range("B10000").End(xlUp).Row
  Range("C5:C" & Er).ClearContents
  For i = Er To 5 Step -1
    iM = iM + Cells(i, 2).Value
    If Cells(i, 1) <> "" Then
       Cells(i, 3).Value = iM
       iM = 0
    End If
  Next i
End Sub
Sửa lại tí thôi:
PHP:
Sub TongCong()
  Dim Er As Integer, iM As String
  Er = Range("B10000").End(xlUp).Row
  Range("C5:C" & Er).ClearContents
  For i = Er To 5 Step -1
    If iM = "" Then iM = Cells(i, 2).Address(0, 0)
    If Cells(i, 1) <> "" Then
       Cells(i, 3).Value = "=SUM(" & Cells(i, 2).Address(0, 0) & ":" & iM & ")"
       iM = ""
    End If
  Next i
End Sub
 
Sửa lại tí thôi:
PHP:
Sub TongCong()
  Dim Er As Integer, iM As String
  Er = Range("B10000").End(xlUp).Row
  Range("C5:C" & Er).ClearContents
  For i = Er To 5 Step -1
    If iM = "" Then iM = Cells(i, 2).Address(0, 0)
    If Cells(i, 1) <> "" Then
       Cells(i, 3).Value = "=SUM(" & Cells(i, 2).Address(0, 0) & ":" & iM & ")"
       iM = ""
    End If
  Next i
End Sub
Em nghĩ thuật toán từ tối mà không được trong trường hợp em muốn kết quả tổng cộng đặt ngay tại cột B chứ không phải là cột C như bài cũ nữa (tức kết quả tổng tính được đặt ngay trên cùng cột với các thành phần của nó) thì trong trường hợp này code sửa thế nào ah?
 
Em nghĩ thuật toán từ tối mà không được trong trường hợp em muốn kết quả tổng cộng đặt ngay tại cột B chứ không phải là cột C như bài cũ nữa (tức kết quả tổng tính được đặt ngay trên cùng cột với các thành phần của nó) thì trong trường hợp này code sửa thế nào ah?

Các bác biết, xin làm giùm em với. Em đang rất cần học hỏi VBA
 
Em nghĩ thuật toán từ tối mà không được trong trường hợp em muốn kết quả tổng cộng đặt ngay tại cột B chứ không phải là cột C như bài cũ nữa (tức kết quả tổng tính được đặt ngay trên cùng cột với các thành phần của nó) thì trong trường hợp này code sửa thế nào ah?

Nếu không có giá trị ở cột B để cho ra kết quả ở cột C, thì lấy giá trị nào để xuất kết quả ra cột B, mà ý của bạn lại là công thức hả bạn?
 
Em nghĩ thuật toán từ tối mà không được trong trường hợp em muốn kết quả tổng cộng đặt ngay tại cột B chứ không phải là cột C như bài cũ nữa (tức kết quả tổng tính được đặt ngay trên cùng cột với các thành phần của nó) thì trong trường hợp này code sửa thế nào ah?
Cũng chỉ sửa có tí thôi:
PHP:
Sub TongCong()
  Dim Er As Integer, iM As String
  Er = Range("B10000").End(xlUp).Row
  Range("C5:C" & Er).ClearContents
  For i = Er To 5 Step -1
    If iM = "" Then iM = Cells(i, 2).Address(0, 0)
    If Cells(i, 2) = "" Then
       Cells(i, 2).Value = "=SUM(" & Cells(i + 1, 2).Address(0, 0) & ":" & iM & ")"
       iM = ""
    End If
  Next i
End Sub
 
Cũng chỉ sửa có tí thôi:
PHP:
....
       Cells(i, 2).Value = "=SUM(" & Cells(i + 1, 2).Address(0, 0) & ":" & iM & ")"
cảm ơn thày, em đã tìm ra tại sao em không làm được rồi; tối hôm qua em cũng hình dung như vậy nhưng em quên là vòng lặp đi từ dưới lên trên (step-1) nên thay vì câu lệnh của thày em lại viết là
Cells(i, 2).Value = "=SUM(" & Cells(i -1, 2).Address(0, 0) & ":" & iM & ")" lên nó không ra.
 
cảm ơn thày, em đã tìm ra tại sao em không làm được rồi; tối hôm qua em cũng hình dung như vậy nhưng em quên là vòng lặp đi từ dưới lên trên (step-1) nên thay vì câu lệnh của thày em lại viết là
Cells(i, 2).Value = "=SUM(" & Cells(i -1, 2).Address(0, 0) & ":" & iM & ")" lên nó không ra.

Còn một cái mà tôi thấy vẫn chưa ổn là nếu giá trị bên trong mà thêm mục vào thì mình Insert hàng, nếu insert ở giữa thì khì OK, nhưng nếu bắt buộc từng mục có số thứ tự thì công thức sẽ không cộng vào những mục vừa insert mà code cũng không chạy vì Kết quả đã không phải là rỗng.

VD:
Mục A
A1
A2
A3
Mục B
B1
B2
B3
Sau khi chạy code, thì kết quả là SUM(A1,A3)

Bây giờ ta thêm vào 2 hàng nữa:

Mục A
A1
A2
A3
A4
A5

Mục B
B1
B2
B3
Vì code đã có kết quả ở trên, tức là không rỗng, thì code chạy sẽ bỏ qua kết quả này, như vậy công thức sẽ không được cập nhật, trừ khi ta NHỚ sau khi insert thì xoá cái SUM ở mục đó để chạy lại code.
 
Lần chỉnh sửa cuối:
Còn một cái mà tôi thấy vẫn chưa ổn là nếu giá trị bên trong mà thêm mục vào thì mình Insert hàng, nếu insert ở giữa thì khì OK, nhưng nếu bắt buộc từng mục có số thứ tự thì công thức sẽ không cộng vào những mục vừa insert mà code cũng không chạy vì Kết quả đã không phải là rỗng.

VD:
Mục A
A1
A2
A3
Mục B
B1
B2
B3
Sau khi chạy code, thì kết quả là SUM(A1,A3)

Bây giờ ta thêm vào 2 hàng nữa:

Mục A
A1
A2
A3
A4
A5

Mục B
B1
B2
B3
Vì code đã có kết quả ở trên, tức là không rỗng, thì code chạy sẽ bỏ qua kết quả này, như vậy công thức sẽ không được cập nhật, trừ khi ta NHỚ sau khi insert thì xoá cái SUM ở mục đó để chạy lại code.
Theo em cái này cũng đơn giản thôi, thêm câu lệnh xóa để thực hiện nguyên tắc dòng nào mà cột A có số thứ tự sẽ lập tức xóa nội dung cột B của dòng đó đi (cho ô B trở về rỗng như bài toán gốc), sau khi xong thao tác này mới thực hiện lện như thày ndu ở trên.
 
Lần chỉnh sửa cuối:
Theo em cái này cũng đơn giản thôi, thêm câu lệnh xóa để thực hiện nguyên tắc dòng nào mà cột A có số thứ tự sẽ lập tức xóa nội dung cột B của dòng đó đi (cho ô B trở về rỗng như bài toán gốc), sau khi xong thao tác này mới thực hiện lện như thày ndu ở trên.

OK, vậy thì code sửa một chút nữa như vầy:

PHP:
Sub TongCong()
    Dim Rng As Range, Er As Long, i As Long, iM As String
    Range([B5], [B65536].End(xlUp)).Font.Bold = False
    For Each Rng In Range([A5], [A65536].End(xlUp))
        If Rng <> vbNullString Then Rng.Offset(, 1).ClearContents
    Next
    Er = [B65536].End(xlUp).Row
    For i = Er To 5 Step -1
        With Cells(i, 2)
            If iM = vbNullString Then iM = .Address(0, 0)
            If .Value = vbNullString Then
                .Value = "=SUM(" & Cells(i + 1, 2).Address(0, 0) & ":" & iM & ")"
                .Font.Bold = True: iM = vbNullString
            End If
        End With
    Next i
End Sub

Vậy là xong!
 
Lần chỉnh sửa cuối:
Bài này với những ai mới học VBA tiếp cận là hay, tuy nhiên nó chưa tổng quát lắm, bởi nhiều khi trong công việc các cột số thứ tự và cột cần tính tổng không cố định, năm ngoái em được thày concogia và thày ptm0412 giúp cho bài này http://www.giaiphapexcel.com/forum/...tính-tổng-có-thể-copy-nhanh-không-ạh/page3vào đúng đêm 30 tết năm ngoái, đến giờ em vẫn nhớ như in. Gửi bạn Dauthivan xem tham khảo bài này sẽ giúp cho bạn rất nhiều.
 
cảm ơn thày, em đã tìm ra tại sao em không làm được rồi; tối hôm qua em cũng hình dung như vậy nhưng em quên là vòng lặp đi từ dưới lên trên (step-1) nên thay vì câu lệnh của thày em lại viết là
Cells(i, 2).Value = "=SUM(" & Cells(i -1, 2).Address(0, 0) & ":" & iM & ")" lên nó không ra.
Lúc này Cell(i-1,2) chưa xuất hiện thì làm sao mà tính được hả bạn.
 
Vì code đã có kết quả ở trên, tức là không rỗng, thì code chạy sẽ bỏ qua kết quả này, như vậy công thức sẽ không được cập nhật, trừ khi ta NHỚ sau khi insert thì xoá cái SUM ở mục đó để chạy lại code.
Lúc trước ta quét từ dưới lên, khi gặp cell rổng thì gán công thức
Giờ ta thêm 1 điều kiện nữa: Quét ngược từ dưới lên, nếu gặp cell rổng hoặc cell chứa công thức thì sẽ gán công thức mới
(chẳng hạn là If Cells(i, 2) = "" Or Cells(i, 2).HasFormula Then)
Đơn giản thế thôi
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom