RUNGLATHAPTE
Thành viên mới

- Tham gia
- 6/6/10
- Bài viết
- 13
- Được thích
- 0
Hàm này cũng có nhược điểm như cái mình làm, khi thay đổi màu của ô tham chiếu thì hàm không tự động chạy, muốn tính lại kết quả vẫn phải kích hoạt hàm.Tặng Bạn dùng hàm bằng Macro4 của anh NDU tạo nghiên cứu cho Bài mình nhé!
Ít ra người ta còn bấm F9 để cập nhật đượcHàm này cũng có nhược điểm như cái mình làm, khi thay đổi màu của ô tham chiếu thì hàm không tự động chạy, muốn tính lại kết quả vẫn phải kích hoạt hàm.
bạn dùng thử file này xem thế nào nhé. Hàm sumcolor() có nhược điểm là khi thay đổi chỉ số màu thì hàm không tự động chạy được, mà phải kích hoạt hàm mới tính được. Có thể có cách khác, nhưng mình chưa biết làm thế nào hay hơn.
tặng bạn dùng hàm bằng macro4 của anh ndu tạo nghiên cứu cho bài mình nhé!
Sorry, em không dùng Excel 2007 nên không biết! Add-Ins này chắc dùng Ok. (Có file test đính kèm)Ít ra người ta còn bấm F9 để cập nhật được
Với code VBA muốn làm được điều này chỉ cần thêm dòng Application.Volatile vào đầu code là được rồi
Có điều, dù chưa xem file của bạn cũng biết chắc trong đó chẳng có tí code nào rồi (file xlsx làm gì cho lưu code ---> Bạn nhầm rồi đấy)
Code của bạn là:Sorry, em không dùng Excel 2007 nên không biết! Add-Ins này chắc dùng Ok. (Có file test đính kèm)
Function SumColor(a As Range, b As Range) As Variant
Dim Cong As Variant
Dim Cll As Range
Cong = 0
For Each Cll In a
If Cll.Interior.ColorIndex = b.Interior.ColorIndex Then
Cong = Cong + Cll.Value
End If
Next
SumColor = Cong
End Function
có thể thêm điều kiện trong câu lệnh if: isnumeric(Cll.value) em nghĩ là OK.Code của bạn là:
Khẳng định code này chưa xài được khi:PHP:Function SumColor(a As Range, b As Range) As Variant Dim Cong As Variant Dim Cll As Range Cong = 0 For Each Cll In a If Cll.Interior.ColorIndex = b.Interior.ColorIndex Then Cong = Cong + Cll.Value End If Next SumColor = Cong End Function
- Vùng a có vài cell chưa Text
- Vùng a có vài cell bị lỗi
------------
Tóm lại: Code còn thiếu bước quan trọng là bẫy lỗi
Tôi thì làm vầyView attachment 72306
có thể thêm điều kiện trong câu lệnh if: isnumeric(Cll.value) em nghĩ là OK.
Hàm sum() của excel cũng không cộng được khi vùng cộng bị lỗi.
Function SumColor(ByVal SrcRng As Range, ByVal ColorRng As Range) As Double
Dim Tmp As Double, Clls As Range
On Error Resume Next
Application.Volatile
For Each Clls In SrcRng
If Clls.Interior.ColorIndex = ColorRng.Interior.ColorIndex Then
Tmp = Clls.Value
SumColor = SumColor + Tmp
End If
Next
End Function
Chưa hẳn việc bỏ qua lỗi đã tốt anh ạ. Hàm sum() của excel vẫn cộng được nếu vùng cộng chứa ô text, nhưng có ô bị lỗi hàm hoặc lỗi giá trị thì hàm sum() sẽ báo lỗi . Việc này có ý nghĩa của nó: Vùng cộng thường là vùng chứa giá trị số, nếu hàm cộng lỗi có nghĩa ít nhất 1 ô trong mảng bị lỗi, người dùng qua đó sẽ tìm kiếm và sửa chữa ô lỗi đó . Nếu lỗi mà vẫn cộng được (thật ra là bỏ qua) thì người dùng không biết trong mảng có ô bị lỗi, và mặc định hiểu giá trị cộng lại là đúng . Điều này đôi khi nguy hiểm (vì nếu dữ liệu khoảng 2000 dòng thì khó phát hiện 1 ô lỗi khi kéo thanh cuộn).Tôi thì làm vầy
Rất đơn giảnPHP:Function SumColor(ByVal SrcRng As Range, ByVal ColorRng As Range) As Double Dim Tmp As Double, Clls As Range On Error Resume Next Application.Volatile For Each Clls In SrcRng If Clls.Interior.ColorIndex = ColorRng.Interior.ColorIndex Then Tmp = Clls.Value SumColor = SumColor + Tmp End If Next End Function
Ah... cái này còn tùy người dùng muốn sao nha!Chưa hẳn việc bỏ qua lỗi đã tốt anh ạ. Hàm sum() của excel vẫn cộng được nếu vùng cộng chứa ô text, nhưng có ô bị lỗi hàm hoặc lỗi giá trị thì hàm sum() sẽ báo lỗi . Việc này có ý nghĩa của nó: Vùng cộng thường là vùng chứa giá trị số, nếu hàm cộng lỗi có nghĩa ít nhất 1 ô trong mảng bị lỗi, người dùng qua đó sẽ tìm kiếm và sửa chữa ô lỗi đó . Nếu lỗi mà vẫn cộng được (thật ra là bỏ qua) thì người dùng không biết trong mảng có ô bị lỗi, và mặc định hiểu giá trị cộng lại là đúng . Điều này đôi khi nguy hiểm (vì nếu dữ liệu khoảng 2000 dòng thì khó phát hiện 1 ô lỗi khi kéo thanh cuộn).
Bạn vào insert -> Name -> Define sẽ rõ công thức trong đó nhé!mình vẫn không làm như cách của bạn được. Xin bạn chỉ dẫn. Mấy hàm mà bạn nói excel mình không có. Có cách nào chỉ cụ tỉ hơn được không bạn. Xin cảm ơn bạn