实现的是50行数字 每行32个 按照排列选择30组 统计每组中多出现的数字
http://topic.csdn.net/u/20080423/17/73ce31e3-4cd7-4e39-a16a-9e1f1f184c1a.html原帖地址相关代码:
Dim strIntsz(50) As String '存放输入的10行数据
Dim intData(50, 32) As Double '存放每行分离出来的数字
Dim strOut As String'此函数用于比较任意三十组 数组中有没有相同数,有输出相同的数,没有输出“NO Find!”
Private Function strBJ(ByRef a() As Double, ByRef b() As Double, ByRef c1() As Double, ByRef c2() As Double, ByRef c3() As Double, ByRef c4() As Double, ByRef c5() As Double, ByRef c6() As Double, ByRef c7() As Double, ByRef c8() As Double, ByRef c9() As Double, ByRef c10() As Double, ByRef c11() As Double, ByRef c12() As Double, ByRef c13() As Double, ByRef c14() As Double, ByRef c15() As Double, ByRef c16() As Double, ByRef c17() As Double, ByRef c18() As Double, ByRef c19() As Double, ByRef c20() As Double, ByRef c21() As Double, ByRef c22() As Double, ByRef c23() As Double, ByRef c25() As Double, ByRef c26() As Double, ByRef c27() As Double, ByRef c28() As Double) As String
Dim smtp(50) As Double
Dim intCont As Integer
Dim str As String
intCont = 0
For i = 1 To 60
For j = 1 To 60
If a(i) = b(j) Then
intCont = intCont + 1
smtp(intCont) = a(i)
End If
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c1(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c2(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c3(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c4(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c5(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c6(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c7(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c8(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c9(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c10(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c11(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c12(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c13(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c14(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c15(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c16(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c17(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c18(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c19(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c20(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c21(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c22(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c23(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c24(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c25(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c26(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c27(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next iFor i = 1 To intCont
For j = 1 To 60
If smtp(i) = c28(j) Then str = str + CStr(smtp(i)) + " "
Next j
Next i
If str = "" Then
strBJ = "No Find!"
Else
strBJ = str
End If
End FunctionPrivate Sub Command2_Click() '
' ReDim intData(10, 10) As Double
Dim X1(32) As Double
Dim X2(32) As Double
Dim X3(32) As Double
Dim X4(32) As Double
Dim X5(32) As Double
Dim X6(32) As Double
Dim X7(32) As Double
Dim X8(32) As Double
Dim X9(32) As Double
Dim X10(32) As Double
Dim X11(32) As Double
Dim X12(32) As Double
Dim X13(32) As Double
Dim X14(32) As Double
Dim X15(32) As Double
Dim X16(32) As Double
Dim X17(32) As Double
Dim X18(32) As Double
Dim X19(32) As Double
Dim X29(32) As Double
Dim X20(32) As Double
Dim X21(32) As Double
Dim X22(32) As Double
Dim X23(32) As Double
Dim X24(32) As Double
Dim X25(32) As Double
Dim X26(32) As Double
Dim X27(32) As Double
Dim X28(32) As Double
Dim X30(32) As Double
Dim n As Integer
Dim v As Variant
'下面程序将10行数字分离并存入 二维数组中
For i = 1 To 50
v = Split(strIntsz(i), " ")
For j = 1 To (UBound(v) + 1)
intData(i, j) = CStr(v(j - 1))
Debug.Print v(j - 1)
Next j
Next i
n = 1
Do While n <= 22 '选择任意三十组组合
For i = n + 28 To 50
For j = 1 To 50X1(j) = intData(1, j)
X2(j) = intData(n, j)
X3(j) = intData(n + 1, j)
X4(j) = intData(n + 2, j)
X5(j) = intData(n + 3, j)
X6(j) = intData(n + 4, j)
X7(j) = intData(n + 5, j)
X9(j) = intData(n + 6, j)
X10(j) = intData(n + 7, j)
X11(j) = intData(n + 8, j)
X12(j) = intData(n + 9, j)
X13(j) = intData(n + 10, j)
X14(j) = intData(n + 11, j)
X15(j) = intData(n + 12, j)
X16(j) = intData(n + 13, j)
X17(j) = intData(n + 14, j)
X18(j) = intData(n + 15, j)
X19(j) = intData(n + 16, j)
X20(j) = intData(n + 17, j)
X21(j) = intData(n + 18, j)
X22(j) = intData(n + 19, j)
X23(j) = intData(n + 20, j)
X24(j) = intData(n + 21, j)
X25(j) = intData(n + 22, j)
X26(j) = intData(n + 23, j)
X27(j) = intData(n + 24, j)
X28(j) = intData(n + 25, j)
X29(j) = intData(n + 26, j)
X30(j) = intData(n + 27, j)
Next j
strOut = strBJ(X1(), X2(), X3(), X4(), X5(), X6(), X7(), X8(), X9(), X10(), X19(), X18(), X17(), X16(), X15(), X14(), X13(), X12(), X11(), X20(), X21(), X22(), X23(), X24(), X25(), X26(), X27(), X28(), X29(), X30())
Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(i) & ": " & strOut
strOut = ""
Next i
n = n + 1
Loop
End Sub在导入  数组后执行COMMAND2时候
错误在这里
strOut = strBJ(X1(), X2(), X3(), X4(), X5(), X6(), X7(), X8(), X9(), X10(), X19(), X18(), X17(), X16(), X15(), X14(), X13(), X12(), X11(), X20(), X21(), X22(), X23(), X24(), X25(), X26(), X27(), X28(), X29(), X30()) 
提示 
错误的参数号或是无效的属性赋值是怎么回事呢

解决方案 »

  1.   

    没看出 strBJ() 有什么问题,调用语句也没有问题,怪!
      

  2.   

    改了   确实出现1楼说的下标越界了X1(j) = intData(1, j)这里 改怎么修改呢?
      

  3.   

    n = 1 
    Do While n  <= 22 '选择任意三十组组合 
        'For i = n + 28 To 50 
            'For j = 1 To 50 
            For j = 1 To 32
                X1(j) = intData(1, j) 
                X2(j) = intData(n, j) 
                X3(j) = intData(n + 1, j) 
                X4(j) = intData(n + 2, j) 
                X5(j) = intData(n + 3, j) 
                ............
                X27(j) = intData(n + 24, j) 
                X28(j) = intData(n + 25, j) 
                X29(j) = intData(n + 26, j) 
                X30(j) = intData(n + 27, j) 
            Next j 
            strOut = strBJ(X1(), X2(),..........X29(), X30()) 
            Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(i) & ": " & strOut 
            strOut = "" 
        'Next i 
        n = n + 1 
    Loop 
      

  4.   

    Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(i) & ": " & strOut可能应该改成:
    Print CStr(n) & "&" & CStr(n + 1) & "&"; CStr(n+28) & ": " & strOut楼主注意:
    你的这段代码:
        X1(j) = intData(1, j) 
        X2(j) = intData(n, j) 
        X3(j) = intData(n + 1, j) 
        X4(j) = intData(n + 2, j) 
        X5(j) = intData(n + 3, j) 
        ............
        X27(j) = intData(n + 24, j) 
        X28(j) = intData(n + 25, j) 
        X29(j) = intData(n + 26, j) 
        X30(j) = intData(n + 27, j) 
    没有对X8()赋值!是少写了一句吧!
      

  5.   


    按照排列选择30组 统计每组中多出现的数字 
    -------------------------------------------------
    Option ExplicitConst maxIdx As Long = 30         '用于设定多少数组,这里按题意设置为30组
    Const maxValue As Long = 60       '每组数据的最大值,测试时可以改小一点
    Dim arr(maxIdx - 1) As String     '用于测试的数据'这个函数用来标志一组数据中出现的数字
    Function GetData(ByVal s As String) As Boolean()
        Dim b(maxValue) As Boolean
        Dim i As Long
        Dim tmp
        
        tmp = Split(s, ",")
        For i = 0 To UBound(tmp)
            b(tmp(i)) = True     '出现的数字,对应的b就设置为true
        Next
        GetData = b
    End Function'这个函数用于比较二个bool数组是否有相同的值
    Function DataComp(Refer() As Boolean, Compare() As Boolean) As Boolean
        'Refer 是参照数据,Compare是用来比较的数据
        Dim i As Long
        Dim b As Boolean
        For i = 0 To maxValue
            Refer(i) = Refer(i) And Compare(i)  '同时存在Refer才继续为true
            If Refer(i) = True Then b = True
        Next
        DataComp = b
    End FunctionPrivate Sub Command1_Click()
        Dim ref() As Boolean    '参照数组
        Dim comp() As Boolean   '对比数组
        Dim i As Long
        Dim msg As String
        '由第一组数据生成参照数组
        ref = GetData(arr(0))
        '从第二组数据开始生成comp与ref对比
        For i = 1 To UBound(arr)
            comp = GetData(arr(i))
            If Not DataComp(ref, comp) Then
                MsgBox "没有每组都出现的数字"
                Exit Sub
            End If
        Next i
        For i = 0 To maxValue
            If ref(i) Then msg = msg & "," & i
        Next
        MsgBox "每组都出现的数字为:" & Mid(msg, 2)
    End SubPrivate Sub Command2_Click()
        '随机生成数据用于测试
        Dim i As Long, j As Long
        Erase arr
        Randomize
        For i = 0 To maxIdx - 1
            For j = 1 To 32  '每组32个数字
                arr(i) = arr(i) & "," & Int(Rnd * maxValue + 1)
            Next j
            arr(i) = Mid(arr(i), 2)
            Debug.Print arr(i)
        Next i
    End Sub
      

  6.   

    Private Sub Command1_Click()
        Dim ref() As Boolean    '参照数组
        Dim comp() As Boolean   '对比数组
        Dim i As Long
        Dim msg As String
        '由第一组数据生成参照数组
        ref = GetData(arr(0))
        '从第二组数据开始生成comp与ref对比
        For i = 1 To UBound(arr)
            comp = GetData(arr(i))
            If Not DataComp(ref, comp) Then
                MsgBox "没有每组都出现的数字"
                Exit Sub
            End If
        Next i
        For i = 0 To maxValue
            If ref(i) Then msg = msg & "," & i
        Next
        MsgBox "每组都出现的数字为:" & Mid(msg, 2)
    End Sub
    有两个问题   第一是这里这个MsgBox "没有每组都出现的数字"
    是30组中? 没有都出现的数字?
    好像不是吧 ?
    还有就是
        '由第一组数据生成参照数组
        ref = GetData(arr(0))
    我没大看明白   为什么要生成两组数据呢?
    我的 用意是要对一组50行的数据 进行搜索  任意30行
    得出以6个为一组或6个以上为一组
    30行中每行都有出现的几组  数字
      

  7.   

    1.MsgBox "没有搜索到每行都出现的数字"2.我的算法是根据你前面一贴示例的要求,和本贴中“按照排列选择30组 统计每组中多出现的数字 ”写的:
    你的前贴:
    ------------------------------------------------------
    例如 
    有3组数据 
    1,2,3,4,5 
    3,4,5,6,7 
    4,5,8,9,0 我要统计三组数据中同时都有的数据 
    最后显示出来 例子就应该输出:4,5 
    ------------------------------------------------------
    由1,2,3,4,5 这行生成参照数据ref,后面的都生成数组comp和ref比较
      

  8.   

    可以加你QQ  请教么第一 统计30行中都出现的数组(这个数组由6个或6个以上的数字组成)
     所以 输出的结果   应该是一行一行的数组第二 参照数据ref  如果只有第一行的话 是不是不完全啊?谢谢
      

  9.   


    1。只输出重新的数字(要求数字个数必须大于6才输出)2 可能2我没说明白  我哪个具体的数字来说好了 例如一开始有50行数字  然后先做C50 30选择  对选出来的30行数据操作  找出每行都有的重复数据
    然后在选择另外30行继续比较 只到所有的30行都选完了http://topic.csdn.net/u/20080425/22/22f411bb-064b-4bfa-bc21-e8a198134101.html您在这个帖子我的回答  我看了 也对的   但是就是数字一变成50就执行错了 10行执行都是对的
      

  10.   

    您在这个帖子我的回答  我看了 也对的   但是就是数字一变成50就执行错了 10行执行都是对的
    -------------------------------
    这个可能是循环越界造成的,你可以这样试试比如,s是你要测试的数组
    dim s(50) as string
    for i=0 to ubound(s)
    '......
    next
    用ubound(s)就可以得到数组s的最大下标,就不会出错了
      

  11.   

    我终于明天哪里出错了dim s(50) as string   是在这里
    因为是从0开始的  那么定义50  也就是有51行数据了
    所以最后一行数据为空
    就一直输出为NO FIND非常感谢vbman2003dim s(49) as string  就对了 呵呵