启明办公

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 85|回复: 0

LET函数实战案例:Excel 如何随机抽取单元格区域中的两个值?

[复制链接]

2

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-12-12 19:33:16 | 显示全部楼层 |阅读模式
前几天刚给大家分享了LET函数的基础教程。
今天碰到的问题,正好可以用LET函数来处理。


问:
Excel 如何随机抽取单元格区域中的两个值?
现在我想随机抽取后面5个模块中的其中两个模块,请问如何解决呢?




随机抽取并不算难,之前也分享过几个类似的案例。

这个问题的关键,题目中没有指明:随机抽取不重复的两个模块。


随机加上不重复,问题难度一下就上来了。
不过,之前其实也有分享过类似的解决方案:
<如何从Excel的一列数字里随机抽取规定个数的不重复数字?>

用同样的方法,完全可以解决这个问题。但今天想分享的是一个再度改进的方法。

先看结果。



随机抽取2个或者3个不重复的数据,都可以实现。


=LET(a,RANDARRAY(1,5),TEXTJOIN(",",,INDEX(C2:G2,,MATCH(LARGE(a,{1,2}),a,0))))

再看原理。
核心的方法和之前一样:

  • 利用RAND函数创建一个随机数序列;(随机)
  • 用LARGE函数从中取最大的N个;(不重复)
  • 再通过MATCH定位到该N个值的位置;(定位)
  • 最后用INDEX借助定位在目标数据中抽取数值。(抽取)

因为需要事先创建出一个随机数序列,之前的案例中采取了辅助列的做法。当时只需要抽取一次随机数据,倒也不算麻烦。
本问题中有10行5列数据需要抽取(真实数据可能更多),意味着要添加10行5列的辅助数据。又麻烦又影响计算效率。于是我就想,能不能不添加辅助列,就在一个单元格内编辑公式搞定这个问题?



一般将辅助列并成一个公式中的做法是直接代入法。即,最终公式中引用了辅助列的部分,直接用辅助列中的公式进行代入。
不过这里的RAND函数没必要代入,可以直接用RANDARRAY函数替换。RANDARRAY函数可以生成一组随机数组,正符合我们的要求。
但是,不管是RAND,还是RANDARRAY,都将面临一个考验:MATCH函数借助LARGE函数定位最大的两个随机数的部分:

  • MATCH(LARGE(RANDARRAY(1,5),{1,2}),RANDARRAY(1,5),0)
这里划线处的两个随机数组,将会在公式中分别计算,导致两处不一致,无法完成定位。如下图:



(为方便演示,改成了2个数的随机)

这意味着我们需要在一个公式中,创建出两个相同的随机数组。这是不可能的,我们不可能创建出两个相同的随机数组,但是,我们可以创建出一个后,用两次。

以前我们的做法是用辅助列来创建出随机数组,后续引用此辅助列。
现在我们可以借助LET函数,创建出随机数组后,将其命名,给后续公式使用。这便是此题文首解答的原理与思路来源。
最后,再看一下该公式的计算过程,帮助理解。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|启明办公

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4

快速回复 返回顶部 返回列表