B列C列两列数据为一个集合,如(2,10),(5,8),(2,12)
(2,10)包含(5,8)
(2,10)与(1,9)之间就不存在真包含关系
两两比较,被包含真子集的那一行放在上面,包含真子集的那一行放在下面。
如果两行不存在真 包含关系,则两行交换位置后,下面的一行继续与其后一行比较。
假设,a行与b行不存在真 包含关系,则交换两行位置,a行再与c行比较,若存在真包含关系,则结束;若还不存在,则再交换两行位置,a行再与d行比较,如果a行一直换到第8行,与g行比较,若还不存在真包含关系,则两行交换位置,就结束了。
再进行第二轮比较,b行与各行比较。就这样,一直循环size值相等的为同一组进行比较。
表格如下:
Time                 Start End name size
2009-01-19 14:34:50 2 10 a 90
2009-01-19 14:34:50 5 8 b 90
2009-01-19 14:34:53 2 12 c 90
2009-01-19 14:34:54 0 8 d 90
2009-01-19 14:34:54 0 80 e 90
2009-01-19 14:34:50 5 6 F 90
2009-01-19 14:34:54 1 9 g 90
2009-01-19 14:34:50 2 10 a 90
2009-01-19 14:34:50 5 8 b 180
2009-01-19 14:34:53 2 12 c 180
2009-01-19 14:34:54 0 8 d 180
2009-01-19 14:34:54 0 80 e 180
2009-01-19 14:34:50 5 6 F 180
2009-01-19 14:34:54 1 9 g 180

解决方案 »

  1.   

    就是用VBA将EXCEL表中的数据,两行之间进行比较,符合条件,则进行下一轮,不符合条件就两行对调,让对调后靠下的一行再与下面一行进行比较。
    想问的是怎么实现这个功能
      

  2.   

    Time      Start End name size
    2009-01-19 2 10 a 90
    2009-01-20 5 8 b 90
    2009-01-21 2 12 c 90
    2009-01-22 0 8 d 90
    2009-01-23 0 80 e 90
    2009-01-24 5 6 F 90
    2009-01-25 1 9 g 90
    2009-01-26 2 10 a 90
    2009-01-27 5 8 b 180
    2009-01-28 2 12 c 180
    2009-01-29 0 8 d 180
    2009-01-30 0 80 e 180
    2009-01-31 5 6 F 180
    2009-01-32 1 9 g 180 上面的表格显示乱了,重新贴一下
      

  3.   

    你的“size相同”的是不是已经排列在一起了呢?
      

  4.   

    先写一个数组的冒泡排序,再改成 Excel 的单列排序,最后改成按包含关系整行排序。
      

  5.   


    size相同的本来是不排在一起,是我人为的将它们放一起的,这一个功能我自己能实现。就是那些不能实现,我是新接触这些的,所以还请大家帮帮忙,谢谢
      

  6.   

    在 Excel 中录个宏:
    在上一行上做“剪切”,然后在下面隔开一行上做“插入剪切的单元格”。
      

  7.   

    你的“交换数据行”的规则说得不太明确,我看得云里雾里的.........
    你还是把上面那些数据处理后的最终结果贴出来大家看一下吧。
    还有:size=90 的数据,最后一行和第一行是相同的,确实在在这种情况吗?
      

  8.   

    冒泡排序的核心是这样一个算法
    我写一个,但是没验证
    {1,3,2,4,7,6,9}
    比如这样一组数我就用vb来实现吧,实现目标,顺序是从小到大排列
    简单一点,没上机的
    dim i as inter
    dim j as inter
    dim k as inter
    for i=0 to k-1'k-1为最数组的最大值
    if a(i)>a(j)then
    j=a(i)
    a(i)=a(j)
    a(j)=j
    end if
    next i解释下,设置一个中间变量
    如果把第i和第i+1和数比较,如果第i个数小于第i+1个数则不替换
    如果第i个数大于第i+1个数
    则把第i个个数赋给中间变量K
    把i+1个数赋给i
    把K赋给第i+1个数
    下一步执行循环,第i+1个数和i+2个数比较,
     一直循环到结束,这样就形成一个排序,
    OK
    初级的教程VB或者C上都有这个例子,很典型的一个排序
      

  9.   

     你的这个问题就涉及到,数组的问题
     可以把这数字集合当成一个数字序列,A(2,10),B(5,8)A,B可以看成一个数组序列
    你的问题可以用VB实现,
    IF A(1)<B(1)AND A(2)>B(2)then
    contune
    eles 执行冒泡排序‘可以讲冒泡排序写成一个函数调用
    end if
    这样应该可以实现吗
    LZ自己再琢磨下吧