我想比较excel中的数据,例如:我想比较表中a列(cell)  c列(bcch) d列(tch)e列(tch1)f列(tch2) 每列都有数据,他们相互减,只要差为0或1或-1都要返回。如果两列中都为空,则不返回。
谢谢了,高手们,小弟期待中呀。

解决方案 »

  1.   

    怎么发到api版面了,应该属于vba应用吧。
      

  2.   

    我的意思是,在excel表,有几列相互减,如果差为0或1或-1 时就返回这个两数据,如果两个数据都为0,则不返回。比如:a列  c列  d列 e列 f列 这就上excel表中相互要减的。怎么做呢
      

  3.   

    比如:a列  c列  d列 e列 f列 这就上excel表中相互要减的
    不知道楼主到底是要哪个减哪个。
    其实最简单的方法是直接在EXCEL中添加一列或多列,在这添加的列中添加一个减法表达式,然后程序只需要关心这几列就可以了。
      

  4.   

    a-b = 1 那如果是 b-a 呢 ? 相互减, 我也想知道结果是如何比较的 ? 
      

  5.   

    我请来了周正龙,研究了一天,终于大概知道楼主大概的意思了
    abcdef,两两互减,类似握手,只要差1以内就返回
    若两列都为空,则不返回但是问题来了,一列为空一列不为空怎么办?
    差大于1怎么办?返不返回?我又请来了周正龙的年画,研究了半天,我想楼主的意思应该是这样
    abcdef,两两互减,若两者都不为空且差在1以内,就返回True,否则就返回False
      

  6.   

    纯粹数学问题,不难:Option Explicit'按行减
    '事先从Excel中读取第一行,并保存Excel表中第一行A、B、C、D、E、F各列的数据,如果是文本,自己转换成长整型
    Dim ExcelData(1 To 6) As LongPrivate Sub Command1_Click()
            Dim i%, j%, Data&
            For i = 1 To 6
                For j = 1 To 6
                    If (ExcelData(i) <> 0) And (ExcelData(j) <> 0) And (ExcelData(i) <> ExcelData(j)) Then '不能自己减自己,也不能都为0
                       Data = ExcelData(i) - ExcelData(j)
                       If Abs(Data) = 1 Or Data = 0 Then '两两相减结果为0,1,-1输出结果
                          MsgBox ("ExcelData(" & i & ")=" & ExcelData(i) & "  ExcelData(" & j & ")=" & ExcelData(j))
                          Exit Sub
                       End If
                    Else
                       ''''''''
                    End If
                Next
            Next
    End Sub
      

  7.   

    上面代码只处理了一行。事先确定有多少行多少列数据。
    从Excel表中分别读取第一行到最后一行的数据,每读取一行都保存到ExcelData数组中,并用上面代码处理,楼主应该算会了吧!
      

  8.   

    错了,错了:
    If (ExcelData(i) <> 0) And (ExcelData(j) <> 0) And (ExcelData(i) <> ExcelData(j)) Then '不能自己减自己,也不能都为0改为:
    If (ExcelData(i) <> 0) And (ExcelData(j) <> 0) And i <>j Then '不能自己减自己,也不能都为0
      

  9.   

    13楼的代码会重复计算吧,而且
    If (ExcelData(i) <> 0) And (ExcelData(j) <> 0) And (ExcelData(i) <> ExcelData(j)) Then 
    不能减自己应该是i <> i吧For i = 1 To 5
        For j = i+1 To 6
    这样可以不用判断是否重复或自减If Abs(Data) = 1 Or Data = 0 Then
    可以改成 Abs(Data)<=1
      

  10.   

    i<>j 我已经在15楼改了。当时我就发现了!
    For i=1 To 5 
        For j=i+1 To 6 
    这样可以不用判断是否重复或自减。这个你说对了!
    If Abs(Data)=1 Or Data=0 Then 
    可以改成 Abs(Data) <=1      这个你错了!
    Abs(Data)=1 Or Data=0和Abs(Data)<=1是两回事
    人家只要两两相减结果为0,1,-1的就输出;而Abs(Data)<=1,两两相减,结果可以为0.5,-0.5吧,还不止!!!
     
     
      

  11.   


    我又看了一下代码,其实你说的也有道理。单纯就整型来看:Abs(Data)=1 Or Data=0和Abs(Data)<=1的确是一回事。我这里少说了一句话,Excel数据类型楼主可以改,一旦计算的代码成型后可以不必修改,这样适用范围宽一些!这样就只能用:Abs(Data)=1 Or Data=0 
      

  12.   

    不好意思哦,cbm666。我的意思是将下面的bcch--tch11之间的数据数据进行对比,对于bcch--tch11之间相邻或相等的数据返回,下面只是excel表中的一部分,如果CI部分相等则比较这两个CI Bcch--Tch11之间的数据,返回bcch--tch11之间相邻或相等的数据。
    CI BCCH TCH1 TCH2 TCH3 TCH4 TCH5 TCH6 TCH7 TCH8 TCH9 TCH10 TCH11
    14001 6 37 51
    14002 30 61 92
    14003 19 81 79
    14031 3 34 64 80
    14032 13 44 70 85 41 30 67 5
    14033 23 60 54 90
    14061 5 31 49 67
    14312 15 37
    14312 CBCCH 58 72
      

  13.   

    不好意思哦,cbm666。我的意思是将下面的bcch--tch11之间的数据数据进行对比,对于bcch--tch11之间相邻或相等的数据返回,下面只是excel表中的一部分,如果CI部分相等则比较这两个CI Bcch--Tch11之间的数据,返回bcch--tch11之间相邻或相等的数据。
    CI  BCCH , TCH1 ,TCH2 ,TCH3 ,TCH4 ,TCH5 ,TCH6 ,TCH7 ,TCH8 ,TCH9 ,TCH10 ,TCH11
    14001 , 6 , 37 ,51
    14002 , 30 , 61 ,92
    14003 , 19 , 81 ,79
    14031 , 3 , 34 ,64 ,80
    14032 , 13 , 44 ,70 ,85 ,41 ,30 ,67 ,5
    14033 , 23 , 60 ,54 ,90
    14061 , 5 , 31 ,49 ,67
    14312 , 15 , 37
    14312 , CBCCH , 58 ,72
      

  14.   

    CI BCCH TCH1 TCH2 TCH3 TCH4 TCH5 TCH6 TCH7 TCH8 TCH9 TCH10 TCH11
    14001 6 37 51
    14002 30 61 92
    14003 19 81 79
    14031 3 34 64 80
    14032 13 44 70 85 41 30 67 5
    14033 23 60 54 90
    14061 5 31 49 67
    14062 21 37 55 71 82 91
    14063 13 75 43 61 84 93
      

  15.   


    任意2列相减,在13楼基础上的For i = 1 To 6 的外面再加一个循环,有N行就循环N次,这完全符合你的要求!