Q:

vlookup or index match to list names one below the other as an Array

I am trying to list names below the other that satisfy a score. In my case it needs to be over 7, I am using =INDEX($B$2:$B$16, SMALL(IF($E$2<=$C$2:$C$16, ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1, ""), ROW(A1))) as an array.
The output im getting is getting stuck at Test2. What am I doing wrong. Is there an easier way to do this

A:

I tend to prefer a single-cell array-formula approach in such cases, i.e. via entering the appropriate array formula in cell G2 only, then copying down as required.
If you were to do likewise, your current formula would work as required.
However, when entered as a multi-cell array formula, i.e. via first selecting the required range (e.g. G2:G8), then entering the formula in the formula bar followed by committing, the construction you are using for SMALL's k parameter, i.e.:
ROW(A1)
will not be processed in a row-relative manner, as desired; in fact, for each instance of the formula, it will remain precisely as above, and not - as is the case when we copy down the equivalent single-cell version - update to, successively:
ROW(A2)
ROW(A3)
ROW(A4)
...
etc.
If you insist on continuing to use a multi-cell array formula here, you will need to use either the unqualified ROW for this parameter, i.e.:
=INDEX($B$2:$B$16,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1,""),ROW()-1))
or, since the above is not very robust, nor flexible (unqualified, ROW() is dependent upon the row in which the formula resides; hence, in your case, since your first formula is in row 2, we need to offset this value by -1), we can use the much better (though slightly longer):
=INDEX($B$2:$B$16,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1,""),ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1))
In any case, even for the single-cell version, ROW is a poorer choice than ROWS for generating incremental integers (https://excelxor.com/2014/08/25/row-vs-rows-for-consecutive-integer-generation/), though sadly ROWS too is not an option for the multi-cell version, which is one of the reasons why I personally tend to prefer a series of single-cell array formulas over a single multi-cell one.
My personal preference would be the single-cell array formula:
=INDEX(B:B,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)),ROWS($1:1)))
and copied down, though I would also probably add a clause to mask errors in cells beyond the expected number of returns, e.g.:
=IF(ROWS($1:1)>A$1,"",INDEX(B:B,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)),ROWS($1:1))))
where A1 contains a formula to count the number of expected returns, e.g.:
=COUNTIF($C$2:$C$16,">="&$E$2)
which is preferable (and especially so over large ranges) to a resource-heavy IFERROR set-up (https://superuser.com/questions/812727/look-up-a-value-in-a-list-and-return-all-multiple-corresponding-values).
And I should also say that I would use a slightly different version if the data being queried formed part of an Excel Table.
Regards

