问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

excel 在某一范围随机生成不重复的数字且数字之间相差最小为2

发布网友 发布时间:2022-05-05 15:38

我来回答

3个回答

热心网友 时间:2022-06-27 17:04

本问题有两个难点:第一个是随机函数是易失性函数,生成后的随机数字会在工作表有任何操作时再次重新生成,不能固定,这一难点在本人回答的若干随机数问题中,已给出了*的解决方法——就是要打开Excel的迭代计算,并在公式中用IF编写好循环引用。第二个是本问题特有的两两相差最小为2这个条件,这在公式中是比较难解决的,解决的方法是构建已知数据和它的转置矩阵相减,但计算量相当大。好在只有5个数字,如果数据量大,计算会比较卡的。当然以题主的举例为例,5个数字在100~200共101个数字中随机产生,出现某两个数字相差小于2的可能性极低,基本上可以不用考虑。所以下面的方法中5个随机数在1~11个数字中产生,这就必须考虑控制两两相差最小为2的问题了。

解决问题的步骤:

在选项的公式选项卡中,把“启用迭代计算”打上对勾后确定,以启用迭代。

假设要B1:B5中生产1~11共5个随机数,且两两最小差值不能小于2。要达到这个目的,要设置一个触发单元格,现在选择A1——当A1中不输入数据或删除数据后,B1:B5中为数字0,当A1中输入任何内容时,B1:B5产生所需要的随机数字:

B1=IF(A$1="",0,IF(OR(B1=0,COUNTIF(B$1:B$5,B1)>1,MIN(ABS(IF(ROW($1:$5)=COLUMN($A:$E),3,$B$1:$B$5-TRANSPOSE($B$1:$B$5))))=1),RANDBETWEEN(1,11),B1))

同时按Ctrl+Shift+Enter三键输入数组公式,下拉到B5

现在A1中没有数据,IF条件为真,B1:B5为0,如图

在A1中随意输入数据(任何字符或数字),IF条件为假,第2个IF因为B1:B5=0,为真,OR条件肯定为真,B2:B5均生成随机数字,这时如果有任意重复数字,OR条件的第2个将为真,或者OR条件的第3个计算两两差值中存在小于2的,均导致OR条件成立,再次重新生成随机数,直到OR条件中全部为假,OR条件才不成立,执行第2个IF的第3参数,取得单元格本身——这就是Excel中的循环引用——所以输入公式前要进行步骤1的设置——启用迭代计算。B1~B5所有已取得的数字的单元格同样不再发生变化。如图

要重新生成随机数时,只要删除A1中的内容,使B列填充了公式的单元格重新初始化——取得一个空格,再在A1中输入数据即可。

PS:本方法计算量大,仅5个数字的取得即可明显感觉到Excel的停顿,如果数据量大,建议考虑VBA。

追答也可以OR条件中的第2个并入第3个条件中,因为第3个条件中已将单元格自身的差值强制赋值为3,这样只要把第3个条件中的=1以为<2即可——为0时重复。
B1=IF(A$1="",0,IF(OR(B1=0,MIN(ABS(IF(ROW($1:$5)=COLUMN($A:$E),3,$B$1:$B$5-TRANSPOSE($B$1:$B$5))))<2),RANDBETWEEN(1,11),B1))

热心网友 时间:2022-06-27 17:05

还是用代码最理想:

代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i, j, t
For i = 2 To 5
    Do
        Range("A" & i) = Application.WorksheetFunction.RandBetween(100, 200)
    For j = 1 To i - 1
        t = Abs(Range("a" & i) - Range("a" & i - j))
        If t < 2 Then Exit For
    Next j
    Loop Until t > 1
Next i
    
End Sub

追问能不能把这个代码改成行生成那,而且我需要30行,只要每一行满足条件就行,本人代码小白,麻烦给解读一下,谢谢了。

追答Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i, j, k
For k = 1 To 30
    Cells(k, 1) = Application.WorksheetFunction.RandBetween(100, 200)
    For i = 2 To 5
        Do
            Cells(k, i) = Application.WorksheetFunction.RandBetween(100, 200)
            For j = 1 To i - 1
                t = Abs(Cells(k, i) - Cells(k, i - j))
                If t < 2 Then Exit For
            Next j
        Loop Until t > 1
    Next i
Next k
End Sub

热心网友 时间:2022-06-27 17:05

伤脑筋,明明相差了不知道有多少个2了。
103和186差了多少个2?你算过没。
186和153差了多少个2?你算过没。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
同龄人早发育好还是晚发育好 小孩晚熟正常吗? 女孩子身体发育的早晚跟童子身有关系吗? 自喷漆如何晾干 自喷漆一般几分钟能干 自动静电喷塑流水线 玫瑰茉莉薄荷茶有什么功效 平面磨床哪家的好 十大名牌平面磨床 手机病毒查杀软件推荐选择最好的手机病毒查杀软件 为什么wife屏蔽器有些手机没信号,有些手机又有信号? 手机屏蔽仪会不会发现没有信号没有网络没有SIM卡的手机 绿豆装在可乐瓶子里,瓶子怎么会变瘪了呢? 红星二锅头多少℃ 红星二锅头? roleplay在工作中是什么意思 role play是什么词性 roleplay是什么 a role play 是什么意思啊?(中文意思)急用 谢谢 求高人解答:英语教学中采用的role play 和 simulation game两种方法的区别是什么? doroleplay是啥意思 Let‘s role play这句话有语法错误吗?因为role是名词,这样用觉得有点奇怪 role-play是动词吗?我们老师说是名词,但是为什么后面又接了the conversation 欧米茄手表不能上发条了怎么办 销售roleplay的意思 role play与reader&#39;s theatre区别 Roplay翻译是啥意思呢? do role-plαy是什么意思? roleplay英译 英语老师们!role play是名词,role play the interview.怎么解释 东风风光580遥控钥匙不好用了,如何启动车 风光580机械钥匙扭不动 excel函数一行数任意两两相减值为2的个数? Excel:2个数据结果相差2%以上为不合格,2%以内为合格,请问要怎么编公式 EXCEL中要求能自动填充某一列的两行中数值的差。 如何设置Excel中两数只差大于0.2时填充颜色? 风光580发动机防盗锁死怎么解除,急急急 excel求两数差值并加入到另一值中 东风风光560遥控钥匙如何拆 东风风光580SUV自动挡怎样才能以遥控器上取出机动钥匙和换电池的方法 excel中两列数据差自动填充到后面单元格所对应数字下面 广发信用卡密码超限怎么办 个人生育保险报销条件 广发信用卡超额怎么办 广发信用卡还清再刷出来,次月出现超额怎么回事? 领取生育津贴,社保要什么条件? 冰箱冷葳室2度,冷冻室零下20度为什么没有效果? 从冰箱冷冻室取出的水被冷到了-20℃仍未结晶的原因是什么?为什么过冷水敲打 电冰箱冷冻室到零下20°的时候温度不再下降了是怎么回事儿机器还没停? 职工生育保险报销条件