I believe that Range("E2") is calculated this way: get the upper left cell
from the visible cells, start from there and go PHYSICALLY 1 row down and 4
columns right WITHOUT CONSIDERING whether all intervening rows and columns are
visible. Since the 1st visible cell is probably the 1st cell of the header
row, that's A1. 1 row down and 4 columns right is E5. I think you have to
examine this range, area by area, counting the rows in each area until you get
to the row you want. Assuming all columns are visible, that means code like
this:
Sub Test()
Set Rng = ActiveSheet.Cells.SpecialCells(xlCellTypeVisible)
TargetRow = 2 + 1 'assume header row is visible, so add 1 to exclude it
PrevRows = 0
For Each A In Rng.Areas
N = A.Rows.Count
If PrevRows + N >= TargetRow Then 'it's in this block
MsgBox A.Cells(TargetRow - PrevRows, 5).Value
Exit For
End If
PrevRows = PrevRows + N 'update count of rows in higher blocks
Next a
End Sub