本文分享一個(gè)基于公式生成n×n隨機(jī)整數(shù)的解決方案,并且每個(gè)整數(shù)都是唯一的。例如,下圖1顯示了生成10行10列的不重復(fù)隨機(jī)整數(shù)。
圖2
公式中的:
FREQUENCY(($A9:$J$11,D8:$K8),ROW(INDIRECT(“1:99”))-1)
是這種情況下COUNTIF函數(shù)有用的替代,它可以用于返回一個(gè)由單元格區(qū)域內(nèi)某些值個(gè)數(shù)組成的數(shù)組,而且執(zhí)行這些計(jì)數(shù)的單元格區(qū)域不是單個(gè)連續(xù)的區(qū)域,而是兩個(gè)這樣的區(qū)域。這里需要注意的是FREQUENCY函數(shù)的一個(gè)特點(diǎn),即返回的數(shù)組比傳遞給它的元素?cái)?shù)量多。因此,上面的結(jié)構(gòu)解析為:
{0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;1;0}
顯然,我們對(duì)該數(shù)組中的零感興趣,因此在IF函數(shù)中將以上內(nèi)容設(shè)置等于為零,其中IF函函數(shù)的參數(shù)value_if_true的值是一個(gè)從0到99的整數(shù)數(shù)組,因此:
IF(FREQUENCY(($A9:$J$11,D8:$K8),ROW(INDIRECT(“1:99”))-1)=0,ROW(INDIRECT(“1:100”))-1)
轉(zhuǎn)換為:
IF({0;0;0;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;1;1;0;0;1}=0,ROW(INDIRECT(“1:100”))-1)
轉(zhuǎn)換為:
IF({0;0;0;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;1;1;0;0;1}=0,{0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99})
轉(zhuǎn)換為:
IF({TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE},{0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99})
結(jié)果為:
{0;1;2;3;4;FALSE;6;FALSE;8;9;10;FALSE;12;FALSE;14;15;16;17;18;19;FALSE;21;FALSE;FALSE;24;25;FALSE;27;28;29;30;31;32;33;34;35;FALSE;FALSE;FALSE;FALSE;40;41;42;43;FALSE;FALSE;46;47;48;49;50;51;52;53;54;55;56;57;FALSE;59;60;61;FALSE;63;64;FALSE;66;67;68;69;70;FALSE;FALSE;73;74;75;76;77;FALSE;79;80;81;82;83;84;85;86;FALSE;88;FALSE;FALSE;91;92;93;FALSE;FALSE;FALSE;97;98;FALSE}
現(xiàn)在,成功地創(chuàng)建了一個(gè)不在公式單元格下面的行或右邊的單元格中的所有值組成的數(shù)組,剩下的就是從此數(shù)組中隨機(jī)選擇一個(gè)數(shù)值。
實(shí)現(xiàn)這一目標(biāo)的一種方法是將上述數(shù)組傳遞給SMALL函數(shù),并指定參數(shù)k的值為合適的隨機(jī)數(shù)。由于數(shù)組中的數(shù)字元素?cái)?shù)等于100減去所引用的區(qū)域的元素?cái)?shù),因此可以將其用于RANDBETWEEN函數(shù)的top參數(shù):
100-COUNTA($A9:$J$11,D8:$K8)
使用了COUNTA函數(shù),可用于處理多個(gè)單元格區(qū)域。因此:
RANDBETWEEN(1,100-COUNTA($A9:$J$11,D8:$K8))
轉(zhuǎn)換為:
RANDBETWEEN(1,100-27)
其中的27等于單元格區(qū)域$A9:$J$11中的20個(gè)非空元素加上D8:$K8中的7個(gè)非空元素。(注意,將A1:J10區(qū)域周邊的無(wú)關(guān)單元格有意地留為空白單元格非常重要)
綜上,公式轉(zhuǎn)換為:
=SMALL({0;1;2;3;4;FALSE;6;FALSE;8;9;10;FALSE;12;FALSE;14;15;16;17;18;19;FALSE;21;FALSE;FALSE;24;25;FALSE;27;28;29;30;31;32;33;34;35;FALSE;FALSE;FALSE;FALSE;40;41;42;43;FALSE;FALSE;46;47;48;49;50;51;52;53;54;55;56;57;FALSE;59;60;61;FALSE;63;64;FALSE;66;67;68;69;70;FALSE;FALSE;73;74;75;76;77;FALSE;79;80;81;82;83;84;85;86;FALSE;88;FALSE;FALSE;91;92;93;FALSE;FALSE;FALSE;97;98;FALSE},RANDBETWEEN(1,73))
得到所需的結(jié)果。
小結(jié)
FREQUENCY函數(shù)、COUNTA函數(shù)可以操作多個(gè)單元格區(qū)域。