Try using IGridTable, ICursor, IRow. This code snippet is for updating raster cell values, however it shows the basics of iterating: [How can I add a new field in a raster attribute table and loop through it?][1] Public Sub CalculateArea(raster As IRaster, areaField As String) Dim bandCol As IRasterBandCollection Dim band As IRasterBand Set bandCol = raster Set band = bandCol.Item(0) Dim hasTable As Boolean band.hasTable hasTable If (hasTable = False) Then Exit Sub End If If (AddVatField(raster, areaField, esriFieldTypeDouble, 38) = True) Then ' calculate cell size Dim rstProps As IRasterProps Set rstProps = raster Dim pnt As IPnt Set pnt = rstProps.MeanCellSize Dim cellSize As Double cellSize = (pnt.X + pnt.Y) / 2# ' get fields index Dim attTable As ITable Set attTable = band.AttributeTable Dim idxArea As Long, idxCount As Long idxArea = attTable.FindField(areaField) idxCount = attTable.FindField("COUNT") ' using update cursor Dim gridTableOp As IGridTableOp Set gridTableOp = New gridTableOp Dim cellCount As Long, cellArea As Double Dim updateCursor As ICursor, updateRow As IRow Set updateCursor = gridTableOp.Update(band.RasterDataset, Nothing, False) Set updateRow = updateCursor.NextRow() Do Until updateRow Is Nothing cellCount = CLng(updateRow.Value(idxCount)) cellArea = cellCount * (cellSize * cellSize) updateRow.Value(idxArea) = cellArea updateCursor.updateRow updateRow Set updateRow = updateCursor.NextRow() Loop End If End Sub Once you are curosing the table you can get the specific field row value by using `row.get_Value(yourfieldIndex)`. If you google > arcobjects row.get_Value you should be able to get plenty of examples showing this. Hope that helps. [1]: http://gis.stackexchange.com/questions/17075/how-can-i-add-a-new-field-in-a-raster-attribute-table-and-loop-through-it