It's involved, and that's fine.
2. If 3 is true, then my question is invalid.
If the static percentage is equal to 100%, that means that each data point
is going to occur exactly a certain number of times in the grid.
I am going to change terminology on you for a moment. Instead of giving a
max percentage, I will use max occurrances.
Say they are:
2, 3, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 2, 2
This would actually be equal to:
(2+3+2+2+2+2+2+2+4+2+2+2+2+3+2+2)=36 / 36 = 100%
So, with that in mind, I assigned a number of occurrances to each data
point, with total occurrances equaling 36. This is how I have my data set up.
M1:M36 ... formatted as text, and I entered every possible column/row
reference: 010, 020, 030, 040, 050, 060, 011, 021, ... 045, 055, 065
N1:N36 =RAND()
O1:O36, this was a little manual, I copied all 16 data points in O1:O16,
then O17:O32, then I typed the 3rd occurrances of FB2, PO, and CU2 in
O33:O35, and the 4th and final occurrance of PO in O36.
There might be a better way to do that, but not off the top of my head.
I had the grid column headers in E4:J4, formatted as text
I had the grid row headers in D5

10, formatted as text
In 011 (cell E5)
=VLOOKUP(E$4&$D5,$M$1:$O$36,3,FALSE)
This should fill the grid in order just as I typed in the O column. Then,
all you need to do to randomize it is press F9 (for a new set of random
numbers), then do a Data-->Sort on N1:O36, sort on N column (ascending,
descending, doesn't matter), and your grid will change appropriately.