Forum Discussion
Excel VBA - Count Cells with Borders
- May 07, 2024
Yes, that's a minor modification:
Code:
Function CountBordered(Rng As Range, Optional SkipBlank As Boolean, Optional LineColor) As Long Dim Cel As Range For Each Cel In Rng If Cel.Borders(xlEdgeTop).LineStyle <> xlLineStyleNone And _ Cel.Borders(xlEdgeLeft).LineStyle <> xlLineStyleNone And _ Cel.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone And _ Cel.Borders(xlEdgeRight).LineStyle <> xlLineStyleNone And _ (Cel.Value <> "" Or Not SkipBlank) Then If Not IsMissing(LineColor) Then If Cel.Borders(xlEdgeTop).Color = LineColor And _ Cel.Borders(xlEdgeLeft).Color = LineColor And _ Cel.Borders(xlEdgeBottom).Color = LineColor And _ Cel.Borders(xlEdgeRight).Color = LineColor Then CountBordered = CountBordered + 1 End If Else CountBordered = CountBordered + 1 End If End If Next Cel End Function
Here is a function that does all three.
Function CountBordered(Rng As Range, Optional SkipBlank As Boolean, Optional FillColor) As Long
Dim Cel As Range
For Each Cel In Rng
If Cel.Borders(xlEdgeTop).LineStyle <> xlLineStyleNone And _
Cel.Borders(xlEdgeLeft).LineStyle <> xlLineStyleNone And _
Cel.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone And _
Cel.Borders(xlEdgeRight).LineStyle <> xlLineStyleNone And _
(Cel.Value <> "" Or Not SkipBlank) Then
If Not IsMissing(FillColor) Then
If Cel.Interior.Color = FillColor Then
CountBordered = CountBordered + 1
End If
Else
CountBordered = CountBordered + 1
End If
End If
Next Cel
End Function
To count cells that are surrounded by borders in A1:C6:
=CountBordered(A1:C6)
To count non-empty cells that are surrounded by borders in A1:C6:
=CountBordered(A1:C6, TRUE)
To count cells with red fill that are surrounded by borders in A1:C6:
=CountBordered(A1:C6, , 255)
To count non-empty cells with red fill that are surrounded by borders in A1:C6:
=CountBordered(A1:C6, TRUE, 255)
For green, use 65280, and for blue, use 16711680 instead of 255.
- HansVogelaarMay 07, 2024MVP
Yes, that's a minor modification:
Code:
Function CountBordered(Rng As Range, Optional SkipBlank As Boolean, Optional LineColor) As Long Dim Cel As Range For Each Cel In Rng If Cel.Borders(xlEdgeTop).LineStyle <> xlLineStyleNone And _ Cel.Borders(xlEdgeLeft).LineStyle <> xlLineStyleNone And _ Cel.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone And _ Cel.Borders(xlEdgeRight).LineStyle <> xlLineStyleNone And _ (Cel.Value <> "" Or Not SkipBlank) Then If Not IsMissing(LineColor) Then If Cel.Borders(xlEdgeTop).Color = LineColor And _ Cel.Borders(xlEdgeLeft).Color = LineColor And _ Cel.Borders(xlEdgeBottom).Color = LineColor And _ Cel.Borders(xlEdgeRight).Color = LineColor Then CountBordered = CountBordered + 1 End If Else CountBordered = CountBordered + 1 End If End If Next Cel End Function- Compl9xMay 07, 2024Copper Contributor
That's perfect! You mentioned the numers for green and blue. Does it support the Excel default light blue as well?
- HansVogelaarMay 07, 2024MVP
Yep. That's 15773696
How to find out?
Select a cell with the border color you want.
Activate the Visual Basic Editor.
Press Ctrl+G to activate the Immediate window.
Type
? ActiveCell.Borders(xlEdgeTop).Color
and press Enter.
You can copy this number and paste it into the formula.