If I understand correctly, you are looking to find a specific row where you have all column values in the vLastSelectedCells array, right? You are probably doing this to select the row again, after it's position changes for some reason. This is a scenario we have, too.
Since our data comes from a database, we usually have a unique ID for the row in question or can easily build one in the query. Then you need to do just ONE .FindSearchMatchRow on that (invisible) key-column to get the correct row.
An alternative approach can be to build that key when you are populating your grid. You are probably looping through all the rows anyway and this is a good spot to concatenate some key columns with a separator and put that value into the ID column. To do the search, you just concatenate the values the same way and do a single search.
So for each lRow, something like this should do the trick:
.CellValue(lRow, "ID") = .CellValue(lRow, "col1") + "|" + .CellValue(lRow, "col2") + "|" + .CellValue(lRow, "col3")
to look it up:
iFoundRow = .FindSearchMatchRow("ID", Join(sLastSelectedKey, "|"))
setting sLastSelectedKey is easier, too, because you just need to query
sLastSelectedKey = .CellValue(lRow, "ID")
in the CurCellChange-Event.
Regards,
Oliver