想利用vb程序实现上万条数据大小的比较,求各位大神帮忙

解决方案 »

  1.   

    比如我现在excel里有五个数据,A,B,C,D,E,那么先取前三个数A,B,C,判断B-A与B-C的乘积,若大于0,则保留ABC,然后进入下一个循环,比较BCD的差的积,以此类推。不满足差的积大于0,则删除。
      

  2.   

    (B-A)*(B-C)<=0的话删除什么?B?
    删除之后怎么继续比较?
      

  3.   

    删除A,接着比较BCD
      

  4.   

    若大于0,则保存B,否则读取下一个数据,即BCD的差之积,满足条件,保存C。
      

  5.   

    A,B,C,D,E 5个数,先比较ABC:
    若(B-A)*(B-C)>0,则保存B;(然后退出?)
    若(B-A)*(B-C)<=0,则删除A,并继续比较BCD;
    是这样吗?
      

  6.   

    满足(B-A)*(B-C)>0,则将B保存到另一个数组中,然后接着比较BCD,之后比较CDE,将所有数据进行上面的运算。可以不做删除处理,目的是为了获取满足上面的表达式的值。
      

  7.   

    这个使用集合(Collection)实现的:Option ExplicitDim mcolData As Collection
    Dim mcolResult As CollectionPrivate Sub Command1_Click()
        Set mcolData = New Collection
        
        Dim i As Long
        For i = 1 To 20000
            Randomize Now
            mcolData.Add Rnd
        Next    MsgBox "数据生成完毕!"
    End SubPrivate Sub Command2_Click()
        Set mcolResult = New Collection
        
        Dim i As Long
        For i = 1 To mcolData.Count - 2
            Dim A As Double
            A = mcolData(i)
            
            Dim B As Double
            B = mcolData(i + 1)
            
            Dim C As Double
            C = mcolData(i + 2)
            
            If (B - A) * (B - C) > 0 Then
                mcolResult.Add B
            End If
        Next
        
        MsgBox mcolResult.Count
    End Sub程序运行截图:示例程序下载:
    链接:https://pan.baidu.com/s/1-EPYwATpMnYhJ1r2Xz-Yow 
    提取码:os1n 
      

  8.   

    非常感谢您的指导,我想补充问一下,如果不是随机数,而是要读取计算机任意位置的excel数据,该怎么实现。
      

  9.   

    VB窗体代码中加入这个过程:
    sub LoadFromXls
        dim objXlsApp
        set objXlsApp = createobject("excel.application")
        objxlsapp.visible = true    Dim wb
        Set wb = objXlsApp.workbooks.open("D:\我的文件\文档\book1.xlsx")
        
        With wb.Sheets(1)
            Dim i
            i = 1
            
            While .Cells(i, 1) <> ""
                mobjData.Add CDbl(.Cells(i, 1))
                i = i + 1
            Wend
        End With
        
        wb.Application.Quit
    end sub
    然后增加一个按钮,在点击的事件处理函数中调用这个过程.
      

  10.   

    sub LoadFromXls
        set mcolData = new collection ' 这里加一句创建collection集合.
        dim objXlsApp
      

  11.   

    Option Explicit        '变量在使用之前必须定义,以避免因输入错误而导致变量错误
    Public mcolData As Collection   '定义一个集合
    Public mcolResult As Collection
    Public mcolcompress As Collection
    我想在其他的子程序和窗体模块中调用集合,这个在标准模块的定义有什么问题吗?
      

  12.   

    没有问题,直接用就行.
    如果是类成员变量,可以用前缀m,如mcolData;
    如果是模块,也就是全局变量,可以用前缀g,如gcolData;
    这个是命名规范,你用不用无所谓.
      

  13.   


    Private Sub Command7_Click()
        Set mcolcompress = New Collection
        Dim i, j, n As Long
        n = mcolData.Count
        Dim A As Double
        A = mcolData(i)
        Dim B As Double
        B = mcolData(j)
        If i < n Then
           If A = B Then
               mcolcompress.Add "B"
               i = i + 1
           Else: mcolcompress.addA
                 j = j + 1
           End If
        End If
        Text2.Text = "共有数据:& mcolcompress.count"
    End Sub
           
    看一下我这条语句怎么回事?n = mcolData.Count,为啥显示错误呢
      

  14.   

    你new的Collection赋值给了mcolcompress,用的却是mcolData,所以出错.
    还有你的i,j在使用前都没初始化,肯定要出错.最后,你想要干什么,我怎么看不明白...
      

  15.   

    我是把之前那个集合mcolData中的程序调用到这个程序中,将集合中的数依次进行比较,若A=B则,删除A,保留B,否则A,B都保留,并将保留数放入mcolcompress集合中,之后再比较B,C,依次类推,遍历集合mcolData,并将结果放到mcolcompress集合中。
      

  16.   

    就是在mcolCompress中保存mcolData中的所有不重复的数据,对吧?
    还是在mcolCompress中保存mcolData中的所有[相邻不重复]的数据?
      

  17.   

    去除mcolData中的相邻等值数据,然后保存到mcolcompress集合中。
    上面那个问题中的mcolData,我在标准模块中定义了全局变,Public mcolData As Collection   '定义一个集合
    Public mcolResult As Collection
    Public mcolcompress As Collection,
    但是,在另一个程序中调用不了mcolData,怎么回事儿
      

  18.   

    另一个程序中当然不能调用mcolData.
    因为是不同的程序呀.
      

  19.   

    两个EXE?同时运行?可以使用ActiveX EXE.