VBA实战三---将表格进行合并并按照时间进行排序

将表格进行合并并按照时间进行排序


该实战与实战二的思路相反

问题

将每个表格中的数据进行汇总到一个表格内并按照时间的顺序进行排序

在这里插入图片描述

思路

1、本次项目打算使用折半查找的方法进行插入,注意折半查找使用时必须保证带查找的内容时有序的。
2、首先将Sheet2即一车间中的数据按照时间顺序进行排列(这里可以尝试采用代码将Sheet2中乱序的数据按照折半查找方法直接插入至总表格内,本人直接在excel中直接排序,后期更新方法),然后读取每个表格中每行数据中的月与日,按照折半查找的思路找到其对应的位置,复制整行数据并插入该位置

3、折半查找
	 基本思想:将中间值与待查找值进行对比,进而缩小待查找的区域。
	 思路:
	 其中low为最小的,high代表最大的,mid为中间的,target为待对比的
	  》mid == target , 则C = mid ,退出循环
	  》mid >target , 则high = mid 
	  》mid<target , 则low = mid
	  本程序中直接在low+1=high时进行判断,当target<low,则C=low,否则C=high

代码展示

Sub merge2()

Dim i, k, k1, m, d As Integer
Dim first, last, mid As Integer
'将sheet2中的数据复制到sheet1即汇总表内
Sheet2.Range("a2:f38").Copy Sheet1.Range("a2")
'循环每个工作表
For i = 3 To Sheets.Count

    k = Sheets(i).Range("a65535").End(xlUp).Row
    '循环工作表中每一行
    For j = 2 To k
    
        k1 = Sheet1.Range("a65535").End(xlUp).Row
        first = 2
        last = k1
    
        m = Sheets(i).Range("a" & j).Value
        d = Sheets(i).Range("b" & j).Value
        '查找应该插入的位置
        For g = 0 To 10000
        
            mid = (first + last) / 2
            If Sheet1.Range("a" & mid) > m Then
                last = mid
            ElseIf Sheet1.Range("a" & mid) < m Then
                first = mid
            ElseIf Sheet1.Range("b" & mid) > d Then
                last = mid
            ElseIf Sheet1.Range("b" & mid) < d Then
                first = mid
            Else
                c = mid
            End If
            
            If first + 1 = last Then
                If Sheet1.Range("a" & first) = m And Sheet1.Range("b" & first) > d Then
                    c = first
                    Exit For
                Else
                    c = last
                    Exit For
                End If
            End If
        Next
        '复制整行数据至汇总表(待学知识点)
        Sheets(i).Range("a" & j).EntireRow.Copy
        Sheet1.Range("a" & c).EntireRow.Select
        Selection.Insert Shift:=xlDown
    Next
Next
End Sub

运行结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值