проблема в том, что диапазон, начинающийся с SpecialCells()
, является (почти всегда) прерывистым, поэтому вы должны перебирать его Areas
и его столбцы, чтобы получить желаемый результат
Function GetAreaRangeItem(areaRng, rowIndex As Long, colIndex As Long)
Dim iArea As Long, nRows As Long
With areaRng
Do
iArea = iArea + 1
nRows = nRows + .Areas(iArea).Rows.Count
Loop While rowIndex > nRows And iArea < .Areas.Count
If iArea <= .Areas.Count Then
With .Areas(iArea)
If colIndex <= .Columns.Count Then
GetAreaRangeItem = .Item(colIndex)
Else
MsgBox "column index out of range!"
End If
End With
Else
MsgBox "row index out of range!"
End If
End With
End Function
например:
MsgBox GetAreaRangeItem(tbl.Range.SpecialCells(xlCellTypeVisible), 2, 10)