In a userform, the listbox or combox can be set to jump to the closest match
as you type - it doesn't reduce the possible selections, but this should
achieve the desired result. You would need to sort the list.
It really doesn't require code. You just use the MatchEntry property:
Here are the choices (from help)
fmMatchEntryFirstLetter
Value: 0
Basic matching. The control searches for the next entry that starts with
the character entered. Repeatedly typing the same letter cycles through all
entries beginning with that letter.
FmMatchEntryComplete
Value: 1
Extended matching. As each character is typed, the control searches for an
entry matching all characters entered (default).
FmMatchEntryNone
Value: 2
No matching.
You need to read the vba help on this to get further information. Look at
some of the other properties of the listbox or combobox as well.