The error message is telling you exactly what's wrong, and it's not a bug. Parameter 2 of the INDEX function expects a number, a row number, not a range. You gave it a named range, and Excel responded exactly as it should.
It's easy to see why this trips people up. You have a working formula in one cell, so you copy the logic to another, and suddenly it fails. The frustration is real, especially when the named range lives on a separate sheet and everything looks consistent. But here's the distinction that matters: INDEX returns a value from a reference at a given position. That position must be a number. When you use the named range itself as parameter 2, you're asking INDEX to look up a range, not a position. The cell above might work because of a subtle difference in context, perhaps the row reference resolved accidentally to a number, or the formula was entered differently. The core rule hasn't changed.
What does this mean for you in practical terms? If you want to return the first non-empty value from a filtered list, you need to tell INDEX which row to grab. A simple `1` as parameter 2 will work: `=INDEX(FILTER(RangeName, RangeName<>""), 1)`. If you need the second value, use `2`. The FILTER function already handles the selection; INDEX just picks the row. This is a fundamental point about how spreadsheet formulas compose together. One function hands a list to another, and the receiving function must be given instructions it understands.
The underlying lesson here is about trusting error messages. They are not obstacles; they are diagnostics. When a function says "expects a number," it's telling you the shape of the input it needs. Ignoring that shape, or assuming the context will fix it, leads to confusion. The solution is to match the function's requirements precisely. Use a hardcoded number, or use a ROW function if you need dynamic behavior. That's it. No workaround, no trick. Just a clearer understanding of how INDEX expects to be fed.