Excel vba 实例(19) - 一键汇总不完全相同的sheet到总表

之前介绍过关于

一键汇总多个sheet数据到总表的实例

,当时分享的实例里面多个sheet里面的内容格式基本相似,数据行、列都是一样的。

今天就来分享一下,数据行、列不完全一样的情况

这个实例也正好是之前有网友找我交流,然后稍微帮忙给调整了一下,这里和大家来分享一下。

他的需求是这样的,如下图:

当日的车辆信息会分别记录在每一个sheet当中,他的需求就是将每天的车辆信息汇总到一个总表当中去,如下图:

观察一下每天的车辆信息的sheet,会发现:
1、每天的车辆数量不相同,有的日期多,有的日期少。
2、每天的sheet中,如果遇到车辆信息比较多的时候,信息会分成两列。

思路

大体的思路和

Excel vba 实例(6) - 一键汇总多个sheet数据到总表

这篇文章的差不多,先遍历每一天的sheet,在当天的sheet中遍历每一行车辆信息(因为有两列车辆信息,简单化,每列都遍历一遍),将遍历的信息复制到总表当中。

但是,中间需要加一些条件判断:

如果“车号”列中为空值得话,则不需要汇总该行信息。

核心代码

  For Each sht In Worksheets #遍历每天的sheet
        If sht.Name <> ActiveSheet.Name Then        
            For i = 5 To 100 #从第五行车辆信息开始,遍历sheet的每一行          
                If Len(sht.Range("B" & i)) > 0 Then 
                sht.Range("A" & i, "C" & i).Copy Cells(copy_hang, 1)                 
                copy_hang = copy_hang + 1
                End If
            Next

            For i = 5 To 100 #遍历sheet的另外一列车辆信息
                If Len(sht.Range("F" & i)) > 0 Then
                sht.Range("E" & i, "G" & i).Copy Cells(copy_hang, 1)                
                copy_hang = copy_hang + 1
                End If
            Next
        End If
    Next

效果图

拓展一下

从效率的角度上来说,上面的这个代码有一些毛病,在这一行:

For i = 5 To 100 #从第五行车辆信息开始,遍历sheet的每一行

这行的意思是从第5行开始遍历,一直遍历到100行。如果车辆信息有101行,那么显然101行就会没有汇总到。如果车辆信息只有10行,那么剩下的11行到100行就没必要去遍历了。

也就意味了要更智能一些:设置条件让代码自行判断需要遍历多少行

如下,加入Do while函数,增加一个判断车辆信息为空的条件。

 start_hang = 5
 Do While True 
    If Len(sht.Range("B" & start_hang)) > 0 Then
                sht.Range("A" & start_hang, "C" & start_hang).Copy Cells(copy_hang, 1)
                start_hang = start_hang + 1
                copy_hang = copy_hang + 1
                End If
                If Len(sht.Range("B" & start_hang)) = 0 Then#如果车辆信息为空,则退出遍历循环
                Exit Do
                End If
Loop

得到的结果和上面是一样的,但是为了说明问题,来比较一下两种方式所需要的时间:

同样是233条记录,方法一所需要的时间为1.55s左右

方法二所需要的时间为1.4s左右

经过永恒君的多次测试,方法二平均要比方法一快0.15s左右,这也印证了方法二的改进可以提高效率。

如果需要源文件的话,后台回复「汇总不同」即可。其他VBA实例,可以在公号里「精华整理」-「VBA实例」进行查看。


如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。



Excel vba 实例(18) - 一键将单列长数据平均拆成多列

收藏 | 17个Excel vba实例汇总

Excel vba 实例(17) - 遍历多个工作簿并提取内容到总表

Excel vba 实例(16) - 按指定字段分类批量提取内容

Excel vba 实例(15) - 按指定字段一键筛选并取最低价记录


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容