吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 316|回复: 14
收起左侧

[经验求助] excel随机三个数的问题

[复制链接]
sun420001775 发表于 2024-9-11 16:57
25吾爱币
在Excel表格上面生成三个随机数且最大值、最小值与中间值偏差不超过2%   比如中间值是1.50

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

FakeLibra666 发表于 2024-9-11 17:17
本帖最后由 FakeLibra666 于 2024-9-11 17:18 编辑

=1.5*(1+RAND()*2%-RAND()*2%)
畅歌 发表于 2024-9-11 17:18
在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 发表于 2024-9-11 17:18
hucheng 发表于 2024-9-11 17:19
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 < minNum Then
            Call Swap(maxNum, minNum)
        End If
        
        ' 生成中间值
        midNum = rangeMin + (rangeMax - rangeMin) * Rnd
        
        ' 检查中间值是否在允许的偏差范围内
        If midNum >= maxNum * 0.98 And midNum <= maxNum * 1.02 And _
           midNum >= minNum * 0.98 And midNum <= minNum * 1.02 Then
            Exit Do
        End If
        
        ' 增加尝试次数
        attempts = attempts + 1
        
        ' 检查是否超过最大尝试次数
        If attempts > 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 发表于 2024-9-11 17:19

在嵌套一层就行了
MoMo21 发表于 2024-9-11 17:20
步骤 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 发表于 2024-9-11 17:22
本帖最后由 FakeLibra666 于 2024-9-11 17:23 编辑

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

如果 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中设置如下表格:

  1. 生成中间值(A1)
    A1 单元格中输入:

    =1.50 * (1 + (RAND() - 0.5) * 0.04)
  2. 生成第一个随机数(B1)
    B1 单元格中输入:

    =MAX(MIN(A1 * (1 + (RAND() - 0.5) * 0.04), A1 * 1.02), A1 * 0.98)
  3. 生成第二个随机数(C1)
    C1 单元格中输入:

    =MAX(MIN(A1 * (1 + (RAND() - 0.5) * 0.04), A1 * 1.02), A1 * 0.98)

通过这种方式,你可以确保 A1 是一个在1.47到1.53之间的随机数,且 B1C1 都在 A1 的±2%范围内。

jyjjf 发表于 2024-9-11 18:19
简单点的话,先生成中间随机值(自己控制好范围),然后再一个加一个减不超过2%的随机值,生成最大和最小
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 01:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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