Office中国论坛/Access中国论坛

标题: 怎样满足两个条件去循环 [打印本页]

作者: bingbaicai    时间: 2017-4-1 17:36
标题: 怎样满足两个条件去循环
我要控制AD18 AD21两个单元格的合格率,然后去随机数,
单单控制一个单元格的VB会写了,现在两个单元格都要控制的话,VB里面不会了
请教下 谢谢


作者: pureshadow    时间: 2017-4-1 21:36
你是想将那两个单元格里的函数公式用vba代码写出来吗?
最简单的办法就是

  1. range("ad18")= "=COUNTIFS(O18:Z19,"<30")/24"
  2. range("ad18")= range("ad18")
复制代码

要按vba的写法就是

  1. dim myrng as range
  2. dim i as long
  3. for each myrng in range("o18:z19")
  4. if myrng < 30 then
  5.   i = i +1
  6. end if
  7. next
  8. range("ad18") = i /24
复制代码

作者: bingbaicai    时间: 2017-4-1 21:39
我正在是要控制两个单元格的合格率,方便提供下QQ吗
作者: bingbaicai    时间: 2017-4-1 21:50
我是要控制两个单元格的合格率,第一个是要控制他们20组数据在-30到30之间!第二个是要控制在0到20之间。合格率可以是都大于90%。
作者: roych    时间: 2017-4-1 22:48
bingbaicai 发表于 2017-4-1 21:50
我是要控制两个单元格的合格率,第一个是要控制他们20组数据在-30到30之间!第二个是要控制在0到20之间。合 ...

试下内置函数RANDBETWEEN
=RANDBETWEEN(-30,30)
作者: bingbaicai    时间: 2017-4-2 06:58
roych 发表于 2017-4-1 22:48
试下内置函数RANDBETWEEN
=RANDBETWEEN(-30,30)

你这个不是,这个太简单了
作者: bingbaicai    时间: 2017-4-2 06:59
pureshadow 发表于 2017-4-1 21:36
你是想将那两个单元格里的函数公式用vba代码写出来吗?
最简单的办法就是
要按vba的写法就是

我上面有附件
作者: bingbaicai    时间: 2017-4-2 07:40
pureshadow 发表于 2017-4-1 21:36
你是想将那两个单元格里的函数公式用vba代码写出来吗?
最简单的办法就是
要按vba的写法就是

你这个应该只是达到了随机,我要控制O18:Z19这单元格的数据合格率,好比是90%,让他去随机数

    Private Sub CommandButton1_Click()
    For i = Range("AG6") To Range("AG7")
    Range("AG5") = i
    Do
        [L11:Z11] = 0
            For Each cel In [L11:Z11]
               cel.Value = Int(Rnd() * 60 - 20)
               If [AD11] < 0.87 Then GoTo a
            Next
a:
        Loop While [AD11] < 0.87
   
   
    ActiveSheet.PageSetup.PrintArea = "A1:AD20"
    ActiveSheet.PrintOut
    Next
   
    End Sub
这是只控制一个,我现在想控制两个区域的
作者: bingbaicai    时间: 2017-4-2 07:43
pureshadow 发表于 2017-4-1 21:36
你是想将那两个单元格里的函数公式用vba代码写出来吗?
最简单的办法就是
要按vba的写法就是


    Private Sub CommandButton1_Click()
    For i = Range("AG6") To Range("AG7")
    Range("AG5") = i
    Do
        [O18:Z19] = 0 And [O21:Z22] = 0
            For Each cel In [O18:Z19]
               cel.Value = Int(Rnd() * 30)
               If [AD20] < 0.87 Then GoTo a
            Next
a:
        Loop While [AD20] < 0.87
        Next
         For Each cel In [O21:Z22]
               cel.Value = Int(Rnd() * 30)
               If [AD20] < 0.87 Then GoTo a
            Next
a:
        Loop While [AD20] < 0.87
        
   
   
    ActiveSheet.PageSetup.PrintArea = "A1:AE30"
    ActiveSheet.PrintOut
    Next
   
    End Sub
这样不对啊
作者: bingbaicai    时间: 2017-4-2 09:20
来人呀
作者: roych    时间: 2017-4-2 12:46
bingbaicai 发表于 2017-4-2 06:58
你这个不是,这个太简单了

那就用规划求解试试好了。
作者: bingbaicai    时间: 2017-4-2 15:22
roych 发表于 2017-4-2 12:46
那就用规划求解试试好了。

能否再详细一点点,老师
作者: bingbaicai    时间: 2017-4-2 15:57
已经在格子那边有老师帮忙解决了
作者: bingbaicai    时间: 2017-4-2 17:05

Private Sub CommandButton1_Click()
    Dim rg As Range
    For i = Range("AG6") To Range("AG7")
        Range("AG5") = i
            Do
                [O18:X19,O26:X27].ClearContents
                    For Each rg In Range("O18:X19,O26:X27")
                       rg.Value = Int(Rnd() * 40 - 20)
                    Next
            Loop Until (Range("AA18").Value > 0.85 And Range("AA26").Value > 0.85)
            
            
            ActiveSheet.PageSetup.PrintArea = "A1:AF33"
            ActiveSheet.PrintOut
    Next
End Sub

现在是遇到两和合格范围要求的就不行了,一直生成不出来满足要求的数据




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3