Excel VBA实例
有个朋友让帮忙看下excel数据怎么处理,初步一看有点复杂,难以下手。进一步分析、搜索,发现VBA可以很好地解决这个问题,总结记录一下。
问题描述:如下图,有N个sheet,每个sheet记录了一个公司的交易详细,需求:统计出来所有公司,每样产品的交易情况。

分析整理思路
初步一看,这些杂乱数据处理起来很麻烦,首先是跨表格统计,然后是数据规律没有那么明显。仔细分析是有规律的:
- 公司的位置是固定的——C4
- 交易详单的起始位置是固定的——B9
- 交易详单的结束方式是固定的——空格
整体解决思路,建立新的sheet,假设为sum:
- 从C4位置取公司名字作为第一列
- 从B9开始向下搜索,B10、B11……,取B9作第2列,数量F9作为第3列,组成一行数据
- 搜索结束条件就是BN为空格
- 对其他所有sheet采用同样的处理
代码模块学习
确定处理方案是VBA之后,学习VBA基本
选取固定表格
Sub test1()
'为单元格C1赋予单元格D6的值方式一
Range("C1") = Range("D6").Value
'为单元格B1赋予单元格A1的值方式二
Cells(3, 2) = Cells(3, 2).Value
End Sub
其中,Cells(i,j)中i指的是行数,j指的是列数,Cells(i,j)指的是第i行的第j列单元格。
循环表达式使用
Sub test2() Dim i As Integer ' for循环使用
For i = 1 To 10
...
Next ' while循环使用
While i < 10
...
Wend End Sub
遍历所有sheet
Sub test3() Dim myWorksheet As Worksheet '遍历所有sheet
For Each myWorksheet In Worksheets
'...
Next End Sub
最终代码实现
Sub calc()
'定义增量循环i
Dim myWorksheet As Worksheet
Dim i As Integer
Dim j As Integer i = 1 '汇总表从第一行开始
Debug.Print "开始测试"
For Each myWorksheet In Worksheets '遍历所有sheet
Debug.Print myWorksheet.Name
j = 9
Debug.Print j
While myWorksheet.Cells(j, 2) <> "" '结束条件Bn为空
Sheets("calc").Cells(i, 1) = myWorksheet.Cells(4, 3) '第一列放名字
Sheets("calc").Cells(i, 2) = myWorksheet.Cells(j, 2) '第二列放型号
Sheets("calc").Cells(i, 3) = myWorksheet.Cells(j, 6) '第三列放数量
i = i + 1 '汇总表往下一行移动
j = j + 1 'B列往下搜索
Wend
Next myWorksheet
End Sub
数据表及其他细节
打开VBA代码窗口
右键任一sheet,选择查看代码。或者快捷键Alt+F11

文件——选项——自定义功能区,常用命令的主选项卡可以选中开发工具,打开菜单栏,可以直接看到Visual Basic和宏菜单

调试方法
Debug.Print,支持变量、字符串等,打印内容输出在立即窗口,立即窗口打开方法:
视图——立即窗口。或者快捷键Ctrl+G

文本转数字
最终生成的数量列是文本,不能做加法统计,需要先转为数字
选中所有文本,左上角出现黄色感叹号,鼠标移动过去,选择转换为数字

实例表格下载
https://files.cnblogs.com/files/quantumplan/vba%E5%AE%9E%E4%BE%8B.rar
Excel VBA实例的更多相关文章
- Excel VBA(宏):添加宏
写在前面: .编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- C#调用Excel VBA宏
近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...
- 2017-5-29 Excel VBA 小游戏
---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...
- 使用Excel VBA编程将网点的百度坐标转换后标注到高德地图上
公司网点表存储的坐标是百度坐标,现需要将网点位置标注到高德地图上,研究了一下高德地图的云图数据模版 http://lbs.amap.com/yuntu/reference/cloudstorage和坐 ...
- Excel VBA附合导线平差自动计算表
这是6,7年前做的一个excel vba自动计算附合导线平差的表格. 对于做测绘的朋友来说,附合导线平差是最基础的技能,目前来说,能平差的软件和工具也很多,像南方的平差易,科傻平差.清华三维平差等,但 ...
- Excel VBA 连接各种数据库(二) VBA连接Oracle数据库
本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...
- Excel vba:批量生成超链接,添加边框,移动sheet等
Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...
- EXcel vba 获取批注信息
Public Function pizhu(i As Range) pizhu = i.Cells.Comment.Text End Function EXcel VBA获取批注信息
- Excel VBA 教程
https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.acc ...
随机推荐
- (原创)【B4A】一步一步入门01:简介、开发环境搭建、HelloWorld
一.前言 作者注:絮絮叨叨,可跳过不看. 一直有开发跨平台软件的需求.因为我的主力是C# ,所以当MAUI出现后,我欣喜若狂的开始学习研究.但是经历了两个月左右的时间,我弃坑了,我发现MAUI不是我能 ...
- Linux环境下:程序的链接, 装载和库[ELF文件详解]
编译过程拆解 预处理处理生成.i文件, .i文件还是源码文件 将所有的宏定义#define展开. 处理#if, #else, #endif等条件编译指令 处理#include, 原地插入文件 cpp ...
- Java8Stream流2
上期对stream流大致总结了一下,后面又做了一些练习,大家可以参考一下. 首先需要建一个 Product的实体类,后面会用到 @Data @AllArgsConstructor @NoArgsCon ...
- 如何避免让线程摸鱼,请用异步技术 async await 拿捏他~
发现问题 你点了外卖后,会一直不做其它事情,一直等外卖的到来么? 当然不会拉! 我们来看看代码世界的: public void Query(){ // 当前线程 向 数据库服务器 发起查询命令 // ...
- python学习第六周总结
封装 封装:就是将数据和功能'封装'起来 隐藏:在类的定义阶段名字前面使用两个下划线表示隐藏.就是将数据和功能隐藏起来不让用户直接调用,而是开发一些接口间接调用,从而可以在接口内添加额外的操作 伪装: ...
- 最长上升子序列 II 时间复杂度(nlogn)
题目:最长上升子序列 II 给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少. 输入格式 第一行包含整数 N. 第二行包含 N个整数,表示完整序列. 输出格式 输出一个整数,表示 ...
- @RestControllerAdvice全局异常统一处理
spring项目中,我们通常规定了返回的格式(成功-失败-异常),特别是异常怎么处理方便呢? 1.自定义状态码实体 package com.ruoyi.common.constant; /** * 返 ...
- Python实现类别变量的独热编码(One-hot Encoding)
本文介绍基于Python下OneHotEncoder与pd.get_dummies两种方法,实现机器学习中最优的编码方法--独热编码的方法. 目录 1 OneHotEncoder 2 pd.get ...
- 把Excel自动转换Json格式
Excel表格转JSON 在实际工作中,我们常常使用Excel记录各种数据,但在各种应用系统传输数据却使用JSON格式,这就需要把Excel转为JSON.如果能把数据转换传输过程自动化就更完 ...
- CTF之WEB学习路线规划
前言 受大佬Lzer0Kx(公众号:LK安全)启发,打算整一篇关于CTF-web的学习路线的分享.当然也算是给一些刚入门的小白的一些学习方向,不至于不知道学啥.废话少说,开整! 以下的所有内容属于我个 ...