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 ...
随机推荐
- 练习_使用递归计算1-n之间的和-练习_使用递归计算阶乘
练习_使用递归计算1-n之间的和 定义一个方法,使用递归计算1-n之间的和 1+2+3+. . .+n n+(n-1)+(n-2)+...+1 已知: 最大值:n 最小值:1 使用递归必须明确: 1. ...
- FAQ 关于pip你应该知道的一些技巧
pip简介 pip是安装了python之后的一个应用程序,包管理程序,有点类似于yum.npm.apt等工具 物理位置一般是python.exe所在目录下的scripts下 以我为例,我Python安 ...
- python 动态导入库
import sys sys.path.append("d:\\") ll = __import__("ll") if __name__ == '__main_ ...
- C-04\IDE基础知识和分支,循环语句
一.浮点数特性及比较方法 浮点数在多参数传参的时候默认是会进行精度转换,由float转换到double,浮点数是一个近视值,不能进行直接等于比较,一般可以用区间法比较但是会存在精度丢失的问题. 浮点数 ...
- XMind 2022软件 及2000+最全模板素材大全 ( 12.5 亲测有效 )
XMind 2022 安装下载教程 下载直通车 :立即下载 模板素材视频直通车:获取 XMind 安装教程 解压文件 鼠标右击[XMind2022(64bit)]压缩包(win11系统需先点击&quo ...
- EF Core DBFirst和CodeFirst 模式使用方法
一.安装依赖包 1.Microsoft.EntityFrameworkCore 2.Microsoft.EntityFrameworkCore.Tools 3.Microsoft.EntityFram ...
- JS弹窗遮罩 POP
html: <div class="popBox"> <div class="pb"> <span class="clo ...
- AOP 编程
1.静态代理 定义一个接口,用以规定执行方法 public interface IOrderProcessor { void Submit(); } 实现执行方法 public class Order ...
- centos7 部署 loonflow
a workflow engine base on django 基于django的工作流引擎系统(通过http接口调用,可以作为企业内部统一的工作流引擎,提供诸如权限申请.资源申请.发布申请.请假. ...
- 张量局部保留投影TensorLPP
Tensor locality preserving projection for hyperspectral image classification 复现的代码python:https://git ...