Srinivas có dữ liệu trong cả hai cột A và B. Anh ta cần tính tổng các giá trị trong cột B mà định dạng ô của các ô tương ứng trong cột A là màu vàng. Ví dụ: nếu định dạng trong ô A17 là màu vàng, thì giá trị trong ô B17 phải được bao gồm trong tổng.

Có rất nhiều macro có sẵn trên Internet (bao gồm cả tại ExcelTips) cho phép bạn thực hiện tính tổng có điều kiện dựa trên màu sắc hoặc định dạng khác của ô. Tuy nhiên, nhu cầu này lại khác ở chỗ nó không phải là màu của ô được đề cập, mà là màu của ô cách một cột bên trái. Điều này vẫn có thể được thực hiện bằng cách sử dụng macro, như được hiển thị ở đây:

Function SumNextYellow(ByVal r As Range)

Dim c As Range     Dim a As Double

For Each c In r         If c.Offset(0, -1).Interior.ColorIndex = 6 Then 'Yellow             a = a + c.Value         End If     Next c     SumNextYellow = a End Function

Hàm có thể được sử dụng trong một công thức trang tính và chấp nhận một tham chiếu phạm vi làm đối số. Sau đó, nó bước qua từng ô trong phạm vi và nếu ô ngay bên trái có màu vàng, thì giá trị được bao gồm trong tổng. (Bạn nên lưu ý rằng ColorIndex được sử dụng trong macro nên được thử nghiệm với phiên bản Excel của bạn để đảm bảo rằng nó có thể áp dụng được; nó có thể khác trong các phiên bản khác nhau.)

Một ví dụ mạnh mẽ hơn được hiển thị trong danh sách sau đây. Hàm này chấp nhận một hoặc nhiều phạm vi ô, cùng với một đối số đại diện cho một mẫu định dạng bạn muốn sử dụng.

Function ColorConditionSum(cSample As Excel.Range, rng As Excel.Range)

' This Function returns sum of values in rng.Columns(2) if ' corresponding cell in rng.Columns(1) is colored with sample ' color (cSample cell)



' Arguments: cSample = cell colored by sample color '            rng = cell range to be processed (2 columns)



Dim rngCol2 As Excel.Range     Dim rngConstants As Excel.Range     Dim rngFormulas As Excel.Range     Dim lColorIndex As Long     Dim MySum As Double     Dim area As Excel.Range     Dim c As Excel.Range

ColorConditionSum = False     If Not TypeOf cSample Is Excel.Range Then Exit Function '>>>     lColorIndex = cSample.Interior.ColorIndex

MySum = 0     Set rngCol2 = Nothing     If TypeOf rng Is Excel.Range Then         If rng.Columns.Count < 2 Then Exit Function '>>>         On Error Resume Next         For Each area In rng.Areas             If rngCol2 Is Nothing Then                 Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeConstants, 1)

If rngCol2 Is Nothing Then                     Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeFormulas, 1)

Else                     Set rngCol2 = Application.Union( _                         rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1))

End If             Else                 Set rngCol2 = Application.Union( _                     rngCol2, area.Columns(2).SpecialCells(xlCellTypeConstants, 1))

Set rngCol2 = Application.Union( _                     rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1))

End If         Next area

For Each area In rngCol2.Areas             For Each c In area.Cells                 With c.Offset(0, -1)

If .Interior.ColorIndex = lColorIndex Then                         MySum = MySum + c.Value                     End If                 End With             Next c         Next area     End If

ColorConditionSum = MySum End Function

Bạn sử dụng hàm này theo cách sau trong trang tính:

=ColorConditionSum(A10, A12:B22)

Trong trường hợp này, là ô có màu nội thất mà bạn muốn đối sánh và A12: B22 là phạm vi ô được đánh giá. Các giá trị được lấy từ cột thứ hai trong phạm vi và định dạng được kiểm tra trên các ô trong cột đầu tiên.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (3298) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: