Mình giới thiệu với bạn 2 hàm :CATHY đã viết:A. Tuấn giúp em với
Em cần cộng số theo màu xanh riêng màu đỏ riêng trên cùng một hàng trong excel , nhờ Anh chỉ em cách làm , em xin gửi file mẫu đính kèm
Cảm ơn anh trứớc nha !!!
CATHY
Function SumMau(Vung As Range, Mau As String) As Double
Dim OKe As Range
Dim SumDo, SumXanh As Double
For Each OKe In Vung
Select Case OKe.Font.ColorIndex
Case 3
SumDo = SumDo + OKe.Value
Case 5
SumXanh = SumXanh + OKe.Value
End Select
Next
If UCase(Mau) = "DO" Then
SumMau = SumDo
ElseIf UCase(Mau) = "XANH" Then
SumMau = SumXanh
End If
Set OKe = Nothing
End Function
Function SumCol(Vung As Range) As Double
Dim OKe As Range
Dim i As Long
i = ActiveCell.Font.ColorIndex
For Each OKe In Vung
If OKe.Font.ColorIndex = i Then SumCol = SumCol + OKe.Value
Next
Set OKe = Nothing
End Function
anhtuan1066 đã viết:Nhận tiện có bạn hỏi về Color Function, tôi gữi file này nhờ Bắp nghiên cứu hộ... Trong file có 2 UDF, ColorBorder dùng đễ cộng và đếm mảu Border,.. và ColorFont dùng đễ cộng và đếm màu Font... Có mấy vẫn để tôi cần hỏi trong file này:
1> Về nguyên tắc 2 UDF này hoàn toàn giống nhau, vậy có cách nào kết hợp 2 thành 1 ko? Chẳng hạn 1 UDF nhưng làm 2 nhiệm vụ.. sẽ cho thêm 1 tham số nữa: 0 và 1... Nếu chọn 0 thì nó là ColorBorder, còn chọn 1 thì nó trở thành ColorFont...
ANH TUẤN
Function OB(TC As Range, Vung As Range, Ham As String) As Double
Dim F, B, i1, i2 As Long
Dim OKe As Range
i1 = TC.Font.ColorIndex
i2 = TC.Interior.ColorIndex
Select Case UCase(Ham)
Case "FO"
For Each OKe In Vung
If OKe.Font.ColorIndex = i1 Then OB = OB + OKe.Value
Next
Case "BO"
For Each OKe In Vung
If OKe.Interior.ColorIndex = i2 Then OB = OB + 1
Next
Case Else
OB = 0
End Select
Set OKe = Nothing
End Function
anhtuan1066 đã viết:2> Tại sao hàm ko cập nhật ngay lập tức khi màu thay đỗi? VD tôi đỗi màu border hoặc font của 1 cell nào đó trong vùng tính toán của nó thì cell chứa hàm vẫn chưa cập nhật dử liệu mới, tôi phải nháy vào công thức rồi Enter thì thay đỗi mới dc cập nhật
ANH TUẤN
Bác xem qua nhé :anhtuan1066 đã viết:Cám ơn Bắp đã có hàm rất hay.. nhưng hình như Bắp chưa hiểu ý tôi thì phải... Bạn đễ ý xem file cùa tôi nhé, tham số cuối cùng là TRUE hoặc FALSE... Nếu chọn TRUE thì hàm trở thành SUM, và chọn FALSE thì hàm trở thành COUNT... Còn cái của Bắp hình như chọn "FO" thì là SUM, "Bo" thì COUNT...
Thật ra ý tôi là vầy nè: (Tôi nói theo hàm của Bắp nhé), nếu đúng ý tôi thì phải có thêm 1 tham số nữa:
=OB(L4,A5:K5,TRUE,"Fo") là SUM các cell có cùng font color với L4
=OB(L4,A5:K5,TRUE,"Bo") là SUM các cell có cùng border color với L4
=OB(L4,A5:K5,FALSE,"Fo") là COUNT các cell có cùng font color với L4
=OB(L4,A5:K5,FALSE,"Bo") là COUNT các cell có cùng fborder color với L4
Bạn hiểu tôi nói ko? Trong file tôi có 2 hàm UDF, 1 cái liên quan đến Font, 1 cái liên quan đến Border... nhưng mỗi hàm đều có 2 chức năng là SUM và COUNT... Giờ tôi muốn kết hợp 2 hàm ấy lại với nhau thành 1... nên làm gì thì làm tôi nghĩ chúng phải có ít nhất 4 tham số...
Bắp nghiên cứu giùm đi nha!
Mến
ANH TUẤN
Option Explicit
Function OB(TC As Range, Vung As Range, Ham As String, Choo As String) As Double
Dim F, B, i1, i2 As Long
Dim OKe As Range
i1 = TC.Font.ColorIndex
i2 = TC.Interior.ColorIndex
If UCase(Ham) = "SU" And UCase(Choo) = "FO" Then
For Each OKe In Vung
If OKe.Font.ColorIndex = i1 Then OB = OB + OKe.Value
Next
ElseIf UCase(Ham) = "CO" And UCase(Choo) = "FO" Then
For Each OKe In Vung
If OKe.Font.ColorIndex = i1 Then OB = OB + 1
Next
ElseIf UCase(Ham) = "SU" And UCase(Choo) = "PA" Then
For Each OKe In Vung
If OKe.Interior.ColorIndex = i2 Then OB = OB + OKe.Value
Next
ElseIf UCase(Ham) = "CO" And UCase(Choo) = "PA" Then
For Each OKe In Vung
If OKe.Interior.ColorIndex = i2 Then OB = OB + 1
Next
Else
OB = 0
End If
Set OKe = Nothing
End Function
Bác này, trêu em :anhtuan1066 đã viết:Với Bắp: Nhanh thật, chưa đầy 15p đã hoàn tất... Cám ơn Bắp... Cái này là đúng ý tôi nhất đây!
Hỏi ngoài lề 1 tí: Mấy tham số như: SU, CO, FO thì tôi còn đoán dc nó là gi.. còn PA thì chả đoán dc là quái gì cả... hi.. hi.. Có thể "diển nôm" dc ko? Vì đôi khi biết dc ý nghĩa của tên các tham số mình cũng sẽ dễ nhớ và dễ sử dụng hơn!
Mến
ANH TUẤN
Mr Okebab đã viết:Mình giới thiệu với bạn 2 hàm :
SumMau(Vung;Mau) : Chỉ tính cho 2 màu
Màu đỏ : =summau(A5:K5;"Do")PHP:Function SumMau(Vung As Range, Mau As String) As Double Dim OKe As Range Dim SumDo, SumXanh As Double For Each OKe In Vung Select Case OKe.Font.ColorIndex Case 3 SumDo = SumDo + OKe.Value Case 5 SumXanh = SumXanh + OKe.Value End Select Next If UCase(Mau) = "DO" Then SumMau = SumDo ElseIf UCase(Mau) = "XANH" Then SumMau = SumXanh End If Set OKe = Nothing End Function
Màu xanh : =summau(A5:K5;"Xanh")
SumCol(Vung) : Tính cho bất cứ màu nào
Khi bạn cần tính màu xanh, chỉ cần bạn cho ô tổng cộng là màu xanhPHP:Function SumCol(Vung As Range) As Double Dim OKe As Range Dim i As Long i = ActiveCell.Font.ColorIndex For Each OKe In Vung If OKe.Font.ColorIndex = i Then SumCol = SumCol + OKe.Value Next Set OKe = Nothing End Function
Các màu khác cũng tương tự
Màu đỏ : =SumCol(A5:K5)
Màu xanh : =SumCol(A5:K5)
Màu đen : =SumCol(A5:K5)
Màu hồng : =SumCol(A5:K5)
Bạn xem File VD nhé
Thân!
Bạn xem kỹ lại bài viết + file ví dụ cụ thể, bạn sẽ hiểu được mà. Mr.Hiếu đã hướng dẫn quá chi tiết rồi, nếu thắc mắc chỗ nào thì hỏi ngay chỗ ấy.CATHY đã viết:Cảm ơn bạn , cách làm của ban rất hay nhưng mình không hiểu mã lệnh trên(MÌNH HƠI BỊ " KÉM") , cách làm như thế nào bạn có thể chỉ cho mình được ko
CATHY
Anh Tuấn ơi sao em làm thử trong file anh gửi thì được nhưng khi em làm trong một file mới thì nó cứ bảo là " #NAME? " ko à ? anh còn " bí kíp " nào nữa ko ?anhtuan1066 đã viết:Bạn xem thử đúng ko nha!
Nhớ thử thêm vài giá trị khác nữa cho chắc
Mến
Bạn làm thế là hoàn toàn đúng... Cái nào ko dám chắc thì đừng mở... Phải hỏi lại tác giả cho chắc... hi... hi... Nếu tác giả khẳng định rằng file ko có virus thì bạn cứ vô tư "Enable macro" và chạy thôi...lolem822000 đã viết:Các bác ơi, em cũng muốn xem nhưng khi tải về mở ra, máy báo contains macros, macros may contain virus. Vậy là em không dám mở nữa luôn. Làm sao xem được file này bây giờ các bác nhỉ!