excel公式技巧:在方形区域内填充不重复的随机整数
发布时间:2022-01-19 19:30:07
本文分享一个基于公式生成n×n随机整数的解决方案,并且每个整数都是唯一的。例如,下图1显示了生成10行10列的不重复随机整数。
图1
解决方案
在单元格A1中输入数组公式:
=SMALL(IF(FREQUENCY(($A2:$J$11,B1:$K1),ROW(INDIRECT(“1:99”))-1)=0,ROW(INDIRECT(“1:100”))-1),RANDBETWEEN(1,100-COUNTA($A2:$J$11,B1:$K1)))
向右向下拖拉至单元格J10。
通常,将此矩阵放置在工作表中的某位置,对于输出结果的最左上角单元格的公式,引用的两个单元格区域包括:
1)10×10的单元格区域从最左上角的单元格正下方的单元格开始,向下并向右延伸。
2)最左上角单元格右侧的1×10单行单元格数组
这里都是相对/绝对混合引用。
工作原理
考虑使用FREQUENCY函数,不仅可以生成通常使用COUNTIF函数能够获得的结果,而且还可以操作由多个单元格区域组成的引用。
让我们从示例中随便选择一个公式,看看其是如何工作的。例如,在单元格C8中的公式:
=SMALL(IF(FREQUENCY(($A9:$J$11,D8:$K8),ROW(INDIRECT(“1:99”))-1)=0,ROW(INDIRECT(“1:100”))-1),RANDBETWEEN(1,100-COUNTA($A9:$J$11,D8:$K8)))
可以看到,公式引用的两个单元格区域是:D8:$K8和$A9:$J$11,如下图2所示。
图2
公式中的:
FREQUENCY(($A9:$J$11,D8:$K8),ROW(INDIRECT(“1:99”))-1)
是这种情况下COUNTIF函数有用的替代,它可以用于返回一个由单元格区域内某些值个数组成的数组,而且执行这些计数的单元格区域不是单个连续的区域,而是两个这样的区域。这里需要注意的是FREQUENCY函数的一个特点,即返回的数组比传递给它的元素数量多。因此,上面的结构解析为:
{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}
显然,我们对该数组中的零感兴趣,因此在IF函数中将以上内容设置等于为零,其中IF函函数的参数value_if_true的值是一个从0到99的整数数组,因此:
IF(FREQUENCY(($A9:$J$11,D8:$K8),ROW(INDIRECT(“1:99”))-1)=0,ROW(INDIRECT(“1:100”))-1)
转换为:
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)
转换为:
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})
转换为:
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})
结果为:
{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}
现在,成功地创建了一个不在公式单元格下面的行或右边的单元格中的所有值组成的数组,剩下的就是从此数组中随机选择一个数值。
实现这一目标的一种方法是将上述数组传递给SMALL函数,并指定参数k的值为合适的随机数。由于数组中的数字元素数等于100减去所引用的区域的元素数,因此可以将其用于RANDBETWEEN函数的top参数:
100-COUNTA($A9:$J$11,D8:$K8)
使用了COUNTA函数,可用于处理多个单元格区域。因此:
RANDBETWEEN(1,100-COUNTA($A9:$J$11,D8:$K8))
转换为:
RANDBETWEEN(1,100-27)
其中的27等于单元格区域$A9:$J$11中的20个非空元素加上D8:$K8中的7个非空元素。(注意,将A1:J10区域周边的无关单元格有意地留为空白单元格非常重要)
综上,公式转换为:
=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))
得到所需的结果。
小结
FREQUENCY函数、COUNTA函数可以操作多个单元格区域。


猜你喜欢
- 360浏览器如何拦截页面广告?正常我们在使用浏览器的时候,都会有一些广告弹出,每次看到这些广告都超级烦,我们要怎么拦截页面广告呢,下面就给大
- 用wps表格来分班的实现方法。在新的一学期,分班是一项学校的常规工作。传统方法按一定的顺序进行分班,就是假定按成绩分成4个班,第一轮,把1、
- 8月8日消息根据外媒windowscentral的报道,Win10 Mobile的发展将会转移到一个新的“Feature2”分支之后,Win
- 在工作或者学习中,很多人都会运用到word制作表格,然后将表格打印出来。但是在运用word制作表格的时候总是会遇到各种各样的要求,甚至有些要
- 相信大家都知道,电脑的开机速度直接影响了我们的工作及心情。最近就有Win10用户反映,电脑开机速度太慢,导致自己错过了客户,丢失了单子,这让
- macOS Monterey 12.6.1 和 macOS Big Sur 11.7.1 更新解决了 AppleMobileFileInte
- Word 2016无法启动转换器PDF文件怎么办?PDF格式是如今使用相对广泛的一种文本格式,最近一位用户使用Word 2016来打开PDF
- win10系统虽然比win7提供更多功能,但是并不完善,比如有的用户安装完系统后会一直不断重启,碰上这个问题要怎么处理呢?跟小编一起往下看吧
- 我们在使用U盘重装了win10操作系统之后,有的小伙伴们可能就会出现统重启后再次回到重装界面的情况。那么对于这种问题小编觉得可能是我们在安装
- 有些用户反映自己的电脑没有声音,怎么操作都无法解决,其实这个问题只是需要安装声卡驱动就可以解决了,下面小编就为大家带来了安装声卡驱动的详细步
- 电脑系统在使用久之后就会出现各种各样的问题。在遇到这些问题的时候,很多朋友都会有想重装系统的想法,不过很多人却不知道要怎么重装系统。下面小编
- 对于一个文档而言,有一个漂亮的封面无疑会增色不少,设置封面可以插入别人制作好的封面模板,也可以自己制作封面,他人制作的封面使用起来虽然快捷方
- 怎么样才能去除word2007页眉中碍眼的横线,方法如下:双击文档中的任意页面的页眉,使页眉处于编辑状态;在“开始”选项卡,单击“样式”组的
- 最近使用win10系统的用户反应win10系统中将pin码删除后每次开机都需要输入PIN码的现象,这种情况有可能是系统账户的问题了,对于这样
- 雷电模拟器是一款可将apk文件运行在电脑端的模拟软件,近期有用户反映在使用雷电模拟器时,出现了界面已停止运行,进不去的情况,为此十分苦恼,那
- 在制作wps表格的时候,怎么样去冻结表格的第一行呢?下面小编就为你介绍wps表格如何冻结第一行的方法啦!wps表格冻结第一行的方法:打开需要
- 很多小伙伴用右键点击新建的时候,发现列表里的ppt不见了,win10右键新建中没有PPT怎么添加?其实此问题是注册列表缺少了一些文件,我们只
- 在Word中表格是一项比较重要的功能,掌握处理表格的各技巧,可以尽可能避免制表过程中遇到的问题,下面教大家如何美化word表格的小技能,希望
- 我们经常在看多页word时,时常感觉太多需要分页看,而word又不像书一样能使用书签那样方便,所以小编这就分享在word中书签的使用与设置。
- 在安装Adobe 应用过程中经常会遇到各种问题,有的时候,朋友们不知道出现的错误代码都有哪些意思?下面,小编为大家总结了一些错误代码及解决方