Using the Cells Property
This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.
You use the Cells property to loop through a range of cells in a worksheet or to refer to a range by using numeric row and column values. The Cells property returns a Range object representing all the cells, or a specified cell, in a worksheet. To work with a single cell, you use the Item property of the Range object returned by the Cells property to specify the index of a specific cell. The Item property accepts arguments specifying the row or the row and column index for a cell.
Because the Item property is the default property of the Range object, it is not necessary to explicitly reference it. For example, the following Set statements both return a reference to cell B5 on Sheet1:
Dim rng1 As Excel.Range
Dim rng2 As Excel.Range
Set rng1 = Worksheet("Sheet1").Cells.Item(5, 2)
Set rng2 = Worksheet("Sheet1").Cells(5, 2)
The row and column index arguments of the Item property return references to individual cells beginning with the first cell in the specified range. For example, the following message box displays "G11" because that is the first cell in the specified Range object:
MsgBox Range("G11:M30").Cells(1,1).Address
The following procedure illustrates how you would use the Cells property to loop through all the cells in a specified range. The OutOfBounds procedure looks for values that are greater than or less than a specified range of values and changes the font color for each cell with such a value:
Function OutOfBounds(rngToCheck As Excel.Range, _
lngLowValue As Long, _
lngHighValue As Long, _
Optional lngHighlightColor As Long = 255) As Boolean
' This procedure illustrates how to use the Cells property
' to iterate through a collection of cells in a range.
' For each cell in the rngTocheck range, if the value of the
' cell is numeric and it falls outside the range of values
' specified by lngLowValue to lngHighValue, the cell font
' is changed to the value of lngHighlightColor (default is red).
Dim rngTemp As Excel.Range
Dim lngRowCounter As Long
Dim lngColCounter As Long
' Validate bounds parameters.
If lngLowValue > lngHighValue Then
Err.Raise vbObjectError + 512 + 1, _
"OutOfBounds Procedure", _
"Invalid bounds parameters submitted: " _
& "Low value must be lower than high value."
Exit Function
End If
' Iterate through cells and determine if values
' are outside bounds parameters. If so, highlight value.
For lngRowCounter = 1 To rngToCheck.Rows.Count
For lngColCounter = 1 To rngToCheck.Columns.Count
Set rngTemp = rngToCheck.Cells(lngRowCounter, lngColCounter)
If IsNumeric(rngTemp.Value) Then
If rngTemp.Value < lngLowValue Or rngTemp.Value > lngHighValue Then
rngTemp.Font.Color = lngHighlightColor
OutOfBounds = True
End If
End If
Next lngColCounter
Next lngRowCounter
End Function
In addition, you can use a For Each…Next statement to loop through the range returned by the Cells property. The following code could be used in the OutOfBounds procedure to loop through cells in a range:
' Iterate through cells and determine if values
' are outside bounds parameters. If so, highlight value.
For Each rngTemp in rngToCheck.Cells
If IsNumeric(rngTemp.Value) Then
If rngTemp.Value < lngLowValue Or rngTemp.Value > lngHighValue Then
rngTemp.Font.Color = lngHighlightColor
OutOfBounds = True
End If
End If
Next rngTemp
See Also
Working with Microsoft Excel Objects | Understanding the Range Object | The Range Property | Using the CurrentRegion and UsedRange Properties | The ActiveCell and Selection Properties | Using the Offset Property