excel随机三个数的问题

查看 98|回复 8
作者:sun420001775   
在Excel表格上面生成三个随机数且最大值、最小值与中间值偏差不超过2%   比如中间值是1.50

个数, 随机

FakeLibra666   

=1.5*(1+RAND()*2%-RAND()*2%)
畅歌   

在Excel表格中生成三个随机数,并确保最大值、最小值与中间值的偏差不超过2%,可以通过使用VBA编程来实现。以下是一个简单的步骤说明和代码示例:
‌打开Excel文件并进入VBA编辑器‌:通过按下Alt+F11或者通过开发工具->Visual Basic进入VBA编辑器。
‌插入一个新的模块‌:在VBA编辑器中,选择插入->模块来创建一个新的代码模块。
‌编写VBA代码‌:在新创建的模块中,你可以编写一个程序来生成满足条件的随机数。以下是一个示例代码,该代码生成三个随机数,并确保最大值、最小值与中间值的偏差不超过2%:
vba
Copy Code
Sub GenerateRandomNumbers()
    Dim R1 As Double, R2 As Double, R3 As Double
    Dim MinValue As Double, MaxValue As Double
    Dim i As Integer
    Dim RandomNumbers(2) As Double
    Randomize ' 初始化随机数生成器
    ' 设置随机数的范围,例如生成0到1之间的随机数,可以根据需要调整这个范围
    MinValue = 0
    MaxValue = 1
    ' 生成三个随机数
    For i = 0 To 2
        Select Case i
            Case 0: R1 = Rnd() * (MaxValue - MinValue) + MinValue ' 生成第一个随机数
            Case 1: R2 = Rnd() * (MaxValue - MinValue) + MinValue ' 生成第二个随机数
            Case 2: R3 = Rnd() * (MaxValue - MinValue) + MinValue ' 生成第三个随机数
        End Select
    Next i
    ' 检查随机数的条件,如果条件不满足,则重新生成直到满足条件
    While Abs(R3 - (R1 + R2) / 2) > 0.02 Or Abs(R2 - R1) > 0.02 Or Abs(R3 - R1) > 0.02
        ' 清空数组,准备重新生成三个随机数
        Erase RandomNumbers
        Randomize ' 重新初始化随机数生成器以确保新的随机数序列
        For i = 0 To 2
            Select Case i
                Case 0: R1 = Rnd() * (MaxValue - MinValue) + MinValue ' 重新生成第一个随机数
                Case 1: R2 = Rnd() * (MaxValue - MinValue) + MinValue ' 重新生成第二个随机数
                Case 2: R3 = Rnd() * (MaxValue - MinValue) + MinValue ' 重新生成第三个随机数
            End Select
        Wend
    End While
    ' 将生成的随机数写入Excel工作表,例如写入A1:C1单元格
    Range("A1").Resize(1, 3).Value = Array(R1, R2, R3)
End Sub
‌运行VBA程序‌:返回Excel,你可以通过分配一个宏到按钮或者使用Alt+F8来运行你刚刚编写的VBA程序。程序将生成三个随机数并写入Excel工作表的指定位置。  
以上答案来自于百度的文言一心
sun420001775
OP
  


FakeLibra666 发表于 2024-9-11 17:17
=1.5*(1+RAND()*2%)

中间值也是随机数
hucheng   

Sub GenerateRandomNumbers()
    Dim maxNum As Double
    Dim minNum As Double
    Dim midNum As Double
    Dim attempts As Integer
    Dim maxAttempts As Integer
    Dim rangeMin As Double
    Dim rangeMax As Double
   
    ' 设置随机数范围
    rangeMin = 1
    rangeMax = 100
   
    ' 设置最大尝试次数
    maxAttempts = 10000
   
    ' 初始化尝试次数
    attempts = 0
   
    ' 开始生成随机数
    Do
        ' 生成最大值和最小值
        maxNum = rangeMin + (rangeMax - rangeMin) * Rnd
        minNum = rangeMin + (rangeMax - rangeMin) * Rnd
        
        ' 确保最大值大于最小值
        If maxNum = maxNum * 0.98 And midNum = minNum * 0.98 And midNum  maxAttempts Then
            MsgBox "无法在合理次数内生成符合条件的随机数。", vbExclamation
            Exit Do
        End If
    Loop
   
    ' 将生成的随机数放入Excel单元格
    Range("A1").Value = maxNum
    Range("B1").Value = midNum
    Range("C1").Value = minNum
End Sub
' 交换两个变量的值
Sub Swap(ByRef a As Variant, ByRef b As Variant)
    Dim temp As Variant
    temp = a
    a = b
    b = temp
End Sub
FakeLibra666   


sun420001775 发表于 2024-9-11 17:18
中间值也是随机数

在嵌套一层就行了
MoMo21   

步骤 1: 生成中间数A1
A1 = RANDBETWEEN(1, 10) / 10 * 10 + RAND() * (10 - 1) / 10 ' 生成1到10之间的随机数,包括小数点后一位
步骤 2: 计算偏差范围
对于A1的2%偏差范围,我们可以这样计算:
    最小值:A1 * (1 - 0.02)
    最大值:A1 * (1 + 0.02)
步骤 3: 生成A2和A3
A2 = A1 + (A1 * 0.02) * RAND() ' 生成一个稍微大于A1的数
A3 = A1 - (A1 * 0.02) * RAND() ' 生成一个稍微小于A1的数
FakeLibra666   

中间值:=RAND()*1000
最小值:=中间值*(1-RAND()*2%)
最大值:=中间值*(1+RAND()*2%)
中间值里的 1000 填写 你想要的数量级的 数字就行
grekevin   

如果 A1 也需要是一个随机数,并且你希望生成的三个随机数(包括 A1)在 A1 的±2%范围内,我们需要稍微调整一下方法来确保所有生成的数值都符合这一要求。
1. 确定中间值范围
假设你想要 A1 是一个随机数,且这个随机数在某个范围内,比如1.50±2%。这意味着 A1 应该在1.47到1.53之间随机生成。然后,我们需要在 A1 的±2%范围内生成另外两个随机数。
2. 生成随机中间值
在 A1 中生成一个随机数:
=1.50 * (1 + (RAND() - 0.5) * 0.04)
这会生成一个在1.47到1.53之间的随机中间值。
3. 生成其他随机数
为了确保其他随机数也在 A1 的±2%范围内,你可以用如下公式生成:
  • 生成第一个随机数:
    =A1 * (1 + (RAND() - 0.5) * 0.04)
  • 生成第二个随机数:
    =A1 * (1 + (RAND() - 0.5) * 0.04)

    4. 限制随机数范围
    为了确保生成的数值不超过±2%的范围,你可以对这些数值进行限制:

  • 第一个随机数的范围限制:
    =MAX(MIN(A1 * (1 + (RAND() - 0.5) * 0.04), A1 * 1.02), A1 * 0.98)

  • 第二个随机数的范围限制:
    =MAX(MIN(A1 * (1 + (RAND() - 0.5) * 0.04), A1 * 1.02), A1 * 0.98)

    示例表格设置
    假设你在Excel中设置如下表格:
    [ol]

  • 生成中间值(A1)
    在 A1 单元格中输入:
    =1.50 * (1 + (RAND() - 0.5) * 0.04)

  • 生成第一个随机数(B1)
    在 B1 单元格中输入:
    =MAX(MIN(A1 * (1 + (RAND() - 0.5) * 0.04), A1 * 1.02), A1 * 0.98)

  • 生成第二个随机数(C1)
    在 C1 单元格中输入:
    =MAX(MIN(A1 * (1 + (RAND() - 0.5) * 0.04), A1 * 1.02), A1 * 0.98)
    [/ol]
    通过这种方式,你可以确保 A1 是一个在1.47到1.53之间的随机数,且 B1 和 C1 都在 A1 的±2%范围内。
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部