哪位高手能帮小弟一个忙啊 
就是随机从多个(个数没有固定)数字中取4个数字组成数据组
这数据组的个数是固定的,而且该组成的数据组可以满足包含多个指定的条件
条件如下:1.(数据组 1/2/3/4判断是否包含条件2/5的其中一个数据即为满足条件(满足)
                2.(数据组 1/2/3/4判断是否包含条件5/6的其中一个数据即为满足条件(不满足)
                 ~
把所有能所有满足条件的组合保存在电脑上
这样的源程序能写吗 ?
 程序要求越高效越好
  谢谢!

解决方案 »

  1.   

    用Rnd语句,加上循环
      

  2.   

    参考着改吧:
    Sub Test1()
        ''从0~9中随机取出4个数字
        ''引用Microsof Scripting Runtime
        Dim i As Integer, s1 As String, t1 As String
        Dim j As Integer, Tj() As String, sDic As New Dictionary
        Tj = Split("01 05;05 06;07 08", ";") ''得到条件数组,所有的条件用;分割
    100:
        sDic.RemoveAll
        s1 = "" ''清空字符串
        For i = 1 To 4 ''循环4次取4个数
            t1 = "0" & Int(Rnd * 10) ''得到一个随机的数字,格式0#
            For j = 0 To UBound(Tj)
                If InStr(1, Tj(j), t1, vbTextCompare) > 0 Then sDic(CStr(j)) = "ok"
            Next
            s1 = s1 & IIf(s1 <> "", " ", "") & t1
        Next
        ''判断当前获取的字符串是否满足所有的条件
        For i = 0 To UBound(Tj)
            If Not sDic.Exists(CStr(i)) Then GoTo 100 ''重新获取
        Next
        Debug.Print s1 ''输出合格的字符串
    End Sub...
      

  3.   

    改成一个函数,然后调用时参考下面代码:Sub test()
        ''调用时这样
        Debug.Print GetRndStr("05 06;07 01 02;03 05")
    End SubFunction GetRndStr(ByVal bTJ As String)
        ''从0~100中随机取出4个数字
        ''bTJ--为输入的条件,多个条件之间用;分割
        ''引用Microsof Scripting Runtime
        If Len(bTJ) = 0 Then Exit Function
        Dim i As Integer, s1 As String, t1 As String
        Dim j As Integer, Tj() As String, sDic As New Dictionary
        Tj = Split(bTJ, ";") ''得到条件数组,所有的条件用;分割
    100:
        sDic.RemoveAll
        s1 = "" ''清空字符串
        For i = 1 To 4 ''循环4次取4个数
            t1 = Format$(Int(Rnd * 101), "00") ''得到一个随机的数字,格式0#
            For j = 0 To UBound(Tj)
                If InStr(1, Tj(j), t1, vbTextCompare) > 0 Then sDic(CStr(j)) = "ok"
            Next
            s1 = s1 & IIf(s1 <> "", " ", "") & t1
        Next
        ''判断当前获取的字符串是否满足所有的条件
        For i = 0 To UBound(Tj)
            If Not sDic.Exists(CStr(i)) Then GoTo 100 ''重新获取
        Next
        GetRndStr = s1 ''返回合格的字符串
    End Function