问题背景
如果一切数据都跑在后台,数据之间的迁移在全部自动化的情况下,无疑使用csv+python等处理更理想。但不是什么都能全自动化的,如果数据的输入都是excel,而且还要能方便的在所有人的机器上跑,那基于excel的VB来实现一些简单数据处理也是非常方便的。
咳咳,扯远了。这章总结的是,如何从一个固定格式的工作表A,提取出想要的数据,按自己设定好的格式,写入另一个工作表B。
设计思路
1、需要掌握的技能
- 需要掌握获取文件路径、文件的打开和关闭等文件操作(实际实现时我都是ctrl+A全选然后ctrl+V贴到专门准备好的一个工作表里,怎么方便怎么来了)
- 需要知道怎么一行行/一列列地遍历指定工作表的有效数据,核心是,用For循环,循环条件是有效行的行号/列号
- 知道行号/列号,能方便的读写该行/列任意单元格的值
- 用IF ELSE对获取到的值进行条件处理
2、实现逻辑
- For循环,遍历源文件A的标志数据列[A]
- IF条件检查[A]的值"aa"的有效性,满足条件则准备处理目标文件B
- For循环,遍历目标文件B的目标数据列[B]
- IF条件检查[B]的整列值里是否包含"aa",包含则按同类项累加,不包含则遍历结束后新增"aa"行
- 根据实际情况,步骤2和4会增加一定复杂度,但总体逻辑都可以拆分为1~4步骤的结合
模块功能实现
- VBA文件路径获取、文件的打开、关闭
Sub DemoFileOp()
Dim WbookSrc
paths = ThisWorkbook.Path & "\" '获取当前路径
Set WbookSrc = Workbooks.Open(paths & "Src.xlsx") '打开源excel文件
......
'关闭释放内存,否则高频操作excel会挂
WbookSrc.Quit Save:=True '保存excel
Set WbookSrc = Nothing '释放内存
End Sub
PS: 如果输入输出不是多个文件,一般来说手动复制源数据到工作表里会更方便。这个只是我一开始查到可以这么玩,实际操作把这块砍掉了。这里放着看以后有需要的时候再捡起来。
- VBA For循环对数据行/列遍历
'****************************** 遍历行 ******************************
Sub DemoForRow()
Dim SrcRcdNum
For SrcRcdNum = 2 To ThisWorkBook.Worksheets(1)

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



