今天我们来学习一个相对比较复杂的问题,如何随机抽取一个列表中百分之三十的内容?
如下图中,需要抽取30%的哥哥们去参加投资方组织的活动。
下面就进入操作步骤。
首先我们要将多列数据转换为单列,这是为了方便后面使用公式来解题。
我们在A列数据下方单元格输入公式:=B2
至于为什么是“=B2”,我们继续往下操作,就能理解它的含义。
然后鼠标放置在单元格右下角,待光标变成十字“+”符号,向右拖动填充公式。
可以看到C列公式的结果是0,因为A15等于B2数据,那么B15就等于C2,而C15则等于D2,D2单元格又是空值,因此显示为0.
随后拉取填充公式的三列数据,再次向下拖动填充公式,如下图所示:
填充完公式,在数据的下半部分只有A列显示出数据内容,其他则显示为0,其原理与上上文所述,A28等于B15,B28等于C15,C28则等于D15,即零值。
通过向右和向下的公式填充,便将多列数据快速转换为单列显示。
得到完整的单列数据后,还需要将A列数据中的公式转换为文本值来显示,此时可以直接复制A列数据,然后再直接粘贴,并在下拉菜单中选择“粘贴为值”选项。
之后删除B、C两列,当然不删除也没关系,甚至连上面A列的数据也可以不用复制粘贴为值,但出于习惯,我们会将不需要的数据清除。
到这一步还只是对数据进行整理,下面还要通过不同公式进行数据统计和计算。
随后我们在B2单元格输入一个随机函数公式:=RAND()
rand函数没有参数,它的表达式就是“rand()”,它的结果会返回0-1之间任意的随机值。
这个值正是我们需要做到“随机抽取”这一步的计算结果。
我们将rand函数公式向下填充。
随后在右侧单元格输入一个函数公式:LARGE($B$2:$B$40,ROUND(COUNTA($B$2:$B$40)*30%,)-ROW(A1))
这个公式中包含了large函数、round函数、counta函数和row函数,我们分别来了解一下它们的作用。
large函数的含义是返回一组数据中指定排序的值,它的表达式为:=large(区域,k),这里“k”指的是第k大的,比如large({1,2,3},2),则表示1、2、3三个数值中第2大的值,结果为2.
round函数的作用是四舍五入,可以指定位数进行舍入,表达式为:=round(值,位数),这里第2参数的位数是指舍入到小数点后面的位数。如round(1.34,1),舍入到小数点后1位,则结果为1.3.
counta函数是常用的计数函数,含义是计算一组数据区域中非空单元格的个数。在这个公式中COUNTA($B$2:$B$40),就是计算列表数据的单元格个数。
再乘以30%,实际上就能得出我需要抽取的人数,它的结果是带有小数点的值,但人数不足1的要取值为1,那么再通过round函数进行舍入,公式中ROUND(COUNTA($B$2:$B$40)*30%,),ROUND第2参数省略,则默认为0,即向最近的整数进行舍入,得到结果值为12.
之后在公式中又要减去一个row函数,这是为了在向下填充公式时,公式能够自动更新计算提取的结果值。因为row函数的含义是返回指定单元格的行号,如ROW(A1),它的结果是返回A1单元格的行号,则等于1.
row函数的结果会随着公式向下填充而变动。
但目前得到的结果还只是B列随机值,现在还要前进一步,将随机值对应的A列名称提取出来。
在excel中匹配引用的函数有很多,常用的有index、lookup和vlookup等,那今天作者就介绍一下使用vlookup反向查找匹配。
vlookup函数常规的表达式中,是不能反向匹配的,也就是说查询值要在首列,匹配值要在右侧的数据列中。
下面我们来看一下vlookup反向查找匹配的函数公式:=VLOOKUP(LARGE($B$2:$B$40,ROUND(COUNTA($B$2:$B$40)*30%,)-ROW(A1)),IF({1,0},$B$2:$B$40,$A$2:$A$40),2,0)
这个公式看起来比较复杂, 作者在公式编辑栏中进行了换行显示,重点是在于vlookup第2参数的应用。
常规的vlookup表达式为:=vlookup(查找值,查询匹配区域,返回列,样式)
它的第2参数查询匹配区域是一个多列数据区域,查询列在第1列,匹配列在后续列,然后第3参数返回列是指要返回匹配的数据在区域中的列数,最后第4参数样式则是指的精确查找或近似查找,可以用1和0来表示,也可以用true和false表示。
回到vlookup函数的第2参数中:IF({1,0},$B$2:$B$40,$A$2:$A$40)
这是一个if判断表达式,if函数的条件参数有个规则,就是必须可以判断真假,用数值来表示就是1和0,条件为真就是1,条件为假则等于0.
这里出现了一个大括号包含了1和0两个数值,属于数组的写法,也就是说当条件值为1时,返回结果为第2参数的$B$2:$B$40,然后继续判断条件值为0时,返回结果第3参数的$A$2:$A$40。
由于条件是数组的组合形式,那么结果也是一个数组的组合,我们在公式编辑栏中按下F9,可以看下它的结果:
vlookup+if的函数组合,看起来不大好理解,童鞋们可以记住这个固定用法,它不仅可以反向查询匹配,也可以进行多条件查询匹配,是vlookup非常经典的一个用法!
回到之前的公式,我们向下填充,公式计算出11个结果之后,计算结果出现了错误,这正是因为我们只抽取了30%的列表数据,超过30%计算结果就会出错。
最后我们可以再利用逻辑函数iferror来进行容错,也就是当公式计算结果错误,则返回指定值。
我们再看下完整结果,如下图所示:
那么到此,随机抽取列表中百分之三十的数据内容,便操作完了。