Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6603|回复: 8

[已解决]要求根据一个数随机出另外两个数,并且两个数在这个数的正负0.0002之间波动。

[复制链接]
发表于 2011-8-19 18:48 | 显示全部楼层 |阅读模式
求助.rar (3.58 KB, 下载次数: 21)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-19 19:24 | 显示全部楼层
这个题仔细看,很难处理的。因为,随机数是根据B1来的,他们的平均值还要等于B1,不好处理
回复

使用道具 举报

 楼主| 发表于 2011-8-20 08:46 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-8-20 22:20 | 显示全部楼层
顶顶顶顶顶顶顶顶
回复

使用道具 举报

发表于 2011-8-21 18:14 | 显示全部楼层    本楼为最佳答案   
A1=ROUND(B1+RAND()*0.0002,4)
A2=2*B1-A1+ROUND(IF(ABS(A1-B1-0.0002)<0.000001,RAND(),RAND()*2-1),0)*0.0001
回复

使用道具 举报

 楼主| 发表于 2011-8-31 14:57 | 显示全部楼层
回复 吕?布 的帖子

函数求助.rar (3.77 KB, 下载次数: 9)
回复

使用道具 举报

发表于 2011-9-27 18:00 | 显示全部楼层
对你说 的新问题我还不是很理解,但是我做了一个VBA的,我想VBA更容易达到细致的目的
Option Explicit

Function 随机数对(数值 As Variant, Optional 波动 As Variant = 0.0002, Optional 修约位数 As Variant = 4) As Variant

    Dim arr(1 To 2) As Double, arrTmp(1 To 2) As Double
    Dim upperboundA As Double, lowerboundA As Double, upperboundB As Double, lowerboundB As Double
    Dim s As String

    Application.Volatile
    upperboundA = 数值 + 波动
    lowerboundA = 数值 - 波动
    arr(1) = RndBetween(lowerboundA, upperboundA)
    If Mid(Split(数值, ".")(1), 修约位数, 1) Mod 2 = 0 Then
        lowerboundB = 数值 - 5 * 10 ^ (-修约位数 - 1)
        upperboundB = 数值 + 5 * 10 ^ (-修约位数 - 1)
    Else
        lowerboundB = 数值 - 4 * 10 ^ (-修约位数 - 1)
        upperboundB = 数值 + 4 * 10 ^ (-修约位数 - 1)
    End If
    lowerboundB = Application.WorksheetFunction.Max(2 * lowerboundB - arr(1), lowerboundA)
    upperboundB = Application.WorksheetFunction.Min(2 * upperboundB - arr(1), upperboundA)
    arr(2) = RndBetween(lowerboundB, upperboundB)
    随机数对 = Application.WorksheetFunction.Transpose(arr)
End Function

' 功能:产生两个数值间(含)的随机数
Function RndBetween(FromValue As Double, ToValue As Double) As Double
    Dim dblDiff As Double
    Dim NumDigitsAfterDecimal As Long
    Dim upperbound As Long, lowerbound As Long

    NumDigitsAfterDecimal = Application.Max(Len(Split(FromValue, ".")(1)), Len(Split(ToValue, ".")(1)))
    dblDiff = Round(ToValue - FromValue, NumDigitsAfterDecimal)
    NumDigitsAfterDecimal = Len(Split(dblDiff, ".")(1))
    Debug.Print FromValue, ToValue, NumDigitsAfterDecimal
    lowerbound = 0
    upperbound = dblDiff * 10 ^ NumDigitsAfterDecimal

    Randomize
    RndBetween = FromValue + Int((upperbound - lowerbound + 1) * Rnd + lowerbound) * 10 ^ (-NumDigitsAfterDecimal)

End Function
回复

使用道具 举报

发表于 2014-5-23 10:13 | 显示全部楼层
吕?布 发表于 2011-8-21 18:14
A1=ROUND(B1+RAND()*0.0002,4)
A2=2*B1-A1+ROUND(IF(ABS(A1-B1-0.0002)

你好。如果根据一个数随机生成两个数,这两个数的平均值为这个数,且这两个数相差不超过0.5,都是保留一位数,怎么设置。能帮我弄下吗
回复

使用道具 举报

发表于 2015-5-6 17:08 | 显示全部楼层

能不能帮忙解答下:                                                                                                                     要求根据一个数随机出另外两个数,并且两个数之差不能超过1,两个数的平均值要等于这个数,两个数求平均值时最后一位为5时不是按四舍五入法进行修约,而是得根据倒数第二位来判断,当倒数第二位为奇数时就进一位,当第二位为偶数是就舍去,这个数随时变动的,所有的数都保留1位小数。

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-7-1 07:44 , Processed in 0.288899 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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