Pool
=Sheet1!$B$3:INDEX(Sheet1!$B:$B,MATCH(REPT("z",100),Sheet1!$B:$B,1))
Selected
=Sheet1!$D$3:INDEX(Sheet1!$E:$E,MATCH(REPT("z",100),Sheet1!$D:$D,1))
RowArr
=IF(COUNTIF(Selected,Pool),FALSE,ROW(Pool))
ItemsLeft
=Sheet1!$J$2:INDEX(Sheet1!$J:$J,MATCH("",Sheet1!$J:$J,0)-1)
Here is the explanation:-
The Named Ranges- Pool & Selected are dynamic ranges where Pool covers Column B all Pool Items and Selected covers columns D & E.
Now the Named Range RowArr. Inside the IF construction I have used.
COUNTIF(Selected,Pool)
to produce an array of count of each Pool item in Selected range. The resultant would look like this.
If Function will then parse each 0 to false and each Non zero element (1) to corresponding Row Number in the array produced by Row(Pool). It will produce the following array:-
Now I have used following formula in J2 and Drag down:-
=IFERROR(INDEX($B:$B,SMALL(RowArr,ROW($A1))),"")
Row($A1) has inside a relative row reference ($A1) which returns incremental row numbers when dragged down. So that's why Small function returns 1st, 2nd, 3rd small number in the RowArr and so on (when dragged down). That’s how the ItemLeft list has been made.
Now Named Range - ItemsLeft will dynamically selects the Items Left. And is used in the data validation for listing purposes. I have improved this Named Range to ignore blanks. So you would like to reconsider this portion.
Check the attached file:-
Bookmarks