yen_truy_van
Thành viên mới

- Tham gia
- 12/3/08
- Bài viết
- 4
- Được thích
- 0
Bạn dùng hàm Sumif là được.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).
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 !!!
Bạn xem thêm ở đâyyen_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).
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.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
Code cũ là: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.
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
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?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ũng chỉ sửa có tí thôi: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?
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:
.....
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à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.
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.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.
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
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.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 trước ta quét từ dưới lên, khi gặp cell rổng thì gán công thứcVì 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.