总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
本期的需求,关乎每一位与数据打交道的小伙伴。想象一下,每个月末需要汇总数十个结构相同的部门业绩表,或是将来自不同渠道、格式却大同小异的数据合并分析
手动复制粘贴不仅效率低下、耗时费力,更是一个极易出错的“雷区”,一个小小的遗漏或错位就可能导致后续分析全面失真
1 实现功能
如下图所示,同一个工作表(如Sheet1)中,并排存放着许多表格(测试数据仅展示4张),它们结构相同
现要求快速整合这些表格,将其合并成一张表格,并只保留第一张表格的表头,其他表格去掉表头后首尾相接。整合后最终效果如下:
这个需求虽然简单,但正好是练习VBA编程的好机会,因为复杂的编程往往都是这些无数简单基础编程糅合而成的
2.1 操作步骤
- 在VBA编辑器左侧的“工程资源管理器”窗口中,右键点击你的工作簿名称,选择“插入” -> “模块”
修改待合并表格所在的工作表后,执行MergeTables代码
Set wsSource = ThisWorkbook.Worksheets("Sheet9") ' 根据实际表名修改
2.2 代码实现
参考代码如下,每个关键步骤都有注释
Sub MergeTables() Dim wsSource As Worksheet, wsDest As Worksheet Dim firstCell As Range, tableRng As Range, dataRng As Range Dim destRow As Long, i As Long, startCol As Long, lastCol As Long Set wsSource = ThisWorkbook.Worksheets("Sheet9") ' 根据实际表名修改 '添加工作表,名字为“合并结果” Set wsDest = ThisWorkbook.Worksheets.Add wsDest.Name = "合并结果" destRow = 2 '默认所有表格都从第一行开始 lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column startCol = 1 '循环处理每张表格 Do While startCol <= lastCol Set firstCell = wsSource.Cells(1, startCol) '跳过空列 If Application.CountA(firstCell) = 0 Then startCol = startCol + 1 GoTo ContinueLoop End If Set tableRng = firstCell.CurrentRegion '添加表头信息(包括格式) tableRng.Cells(1, 1).Copy Destination:=wsDest.Cells(1, 1) tableRng.Cells(1, 2).Copy Destination:=wsDest.Cells(1, 2) '获取数据区域,排除表头 Set dataRng = tableRng.Resize(tableRng.Rows.Count - 1, tableRng.Columns.Count).Offset(1, 0) If Application.CountA(dataRng) > 0 Then ' 复制数据到目标位置 dataRng.Copy Destination:=wsDest.Cells(destRow, 1) destRow = destRow + dataRng.Rows.Count End If '更新起始列位置 startCol = tableRng.Columns(tableRng.Columns.Count).Column + 1ContinueLoop: Loop MsgBox "合并完成!共合并了 " & (destRow - 1) & " 行数据。", vbInformationEnd Sub
3 结尾
好了,今天的编程知识到此结束了,今天揭秘电子设备存储容量标注的“缩水”之谜
无论是电脑内存还是手机存储,标称容量(如8GB、128GB)和系统显示的实际可用容量有差异,一个原因是计算标准差异,如厂商采用十进制(1GB=1000MB),而操作系统采用二进制(1GB=1024MB);另一原因是系统预装软件占用了
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识