Tính tổng theo ĐK màu của ô trong Excel (1 người xem)

Liên hệ QC

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

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é!
 

File đính kè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é!
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.
 
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 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)
 
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.

cảm ơn bạn. Nhưng excel bạn dùng không có hàm sumcolor. Làm thế nào để có hàm đó vậy bạn. Mình mù vba, xin chỉ dẫn, cảm ơn bạn đã giúp đỡ
 
Í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)
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)
 
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)
Code của bạn là:
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
Khẳng định code này chưa xài được khi:
- 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
 
View attachment 72306
Code của bạn là:
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
Khẳng định code này chưa xài được khi:
- 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
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.
 
Lần chỉnh sửa cuối:
View 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.
Tôi thì làm vầy
PHP:
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
Rất đơn giản
 
Tôi thì làm vầy
PHP:
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
Rất đơn giản
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).
 
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).
Ah... cái này còn tùy người dùng muốn sao nha!
Bạn nêu nhớ rằng hàm SUM của Excel vẫn làm việc được với vùng dữ liệu chứa Text, và tôi đang làm theo hướng này
 
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
Bạn vào insert -> Name -> Define sẽ rõ công thức trong đó nhé!
 
Web KT

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

Back
Top Bottom