有个朋友让帮忙看下excel数据怎么处理,初步一看有点复杂,难以下手。进一步分析、搜索,发现VBA可以很好地解决这个问题,总结记录一下。

问题描述:如下图,有N个sheet,每个sheet记录了一个公司的交易详细,需求:统计出来所有公司,每样产品的交易情况。

分析整理思路

初步一看,这些杂乱数据处理起来很麻烦,首先是跨表格统计,然后是数据规律没有那么明显。仔细分析是有规律的:

  1. 公司的位置是固定的——C4
  2. 交易详单的起始位置是固定的——B9
  3. 交易详单的结束方式是固定的——空格

整体解决思路,建立新的sheet,假设为sum:

  1. 从C4位置取公司名字作为第一列
  2. 从B9开始向下搜索,B10、B11……,取B9作第2列,数量F9作为第3列,组成一行数据
  3. 搜索结束条件就是BN为空格
  4. 对其他所有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实例的更多相关文章

  1. Excel VBA(宏):添加宏

    写在前面: .编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...

  2. 来吧!带你玩转 Excel VBA

    来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...

  3. C#调用Excel VBA宏

    近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...

  4. 2017-5-29 Excel VBA 小游戏

    ---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...

  5. 使用Excel VBA编程将网点的百度坐标转换后标注到高德地图上

    公司网点表存储的坐标是百度坐标,现需要将网点位置标注到高德地图上,研究了一下高德地图的云图数据模版 http://lbs.amap.com/yuntu/reference/cloudstorage和坐 ...

  6. Excel VBA附合导线平差自动计算表

    这是6,7年前做的一个excel vba自动计算附合导线平差的表格. 对于做测绘的朋友来说,附合导线平差是最基础的技能,目前来说,能平差的软件和工具也很多,像南方的平差易,科傻平差.清华三维平差等,但 ...

  7. Excel VBA 连接各种数据库(二) VBA连接Oracle数据库

    本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...

  8. Excel vba:批量生成超链接,添加边框,移动sheet等

    Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...

  9. EXcel vba 获取批注信息

    Public Function pizhu(i As Range) pizhu = i.Cells.Comment.Text End Function EXcel VBA获取批注信息

  10. Excel VBA 教程

    https://www.w3cschool.cn/excelvba/  Excel VBA 编程教程 https://www.yiibai.com/vba   VBA教程 http://www.acc ...

随机推荐

  1. (原创)【B4A】一步一步入门01:简介、开发环境搭建、HelloWorld

    一.前言 作者注:絮絮叨叨,可跳过不看. 一直有开发跨平台软件的需求.因为我的主力是C# ,所以当MAUI出现后,我欣喜若狂的开始学习研究.但是经历了两个月左右的时间,我弃坑了,我发现MAUI不是我能 ...

  2. Linux环境下:程序的链接, 装载和库[ELF文件详解]

    编译过程拆解 预处理处理生成.i文件, .i文件还是源码文件 将所有的宏定义#define展开. 处理#if, #else, #endif等条件编译指令 处理#include, 原地插入文件 cpp ...

  3. Java8Stream流2

    上期对stream流大致总结了一下,后面又做了一些练习,大家可以参考一下. 首先需要建一个 Product的实体类,后面会用到 @Data @AllArgsConstructor @NoArgsCon ...

  4. 如何避免让线程摸鱼,请用异步技术 async await 拿捏他~

    发现问题 你点了外卖后,会一直不做其它事情,一直等外卖的到来么? 当然不会拉! 我们来看看代码世界的: public void Query(){ // 当前线程 向 数据库服务器 发起查询命令 // ...

  5. python学习第六周总结

    封装 封装:就是将数据和功能'封装'起来 隐藏:在类的定义阶段名字前面使用两个下划线表示隐藏.就是将数据和功能隐藏起来不让用户直接调用,而是开发一些接口间接调用,从而可以在接口内添加额外的操作 伪装: ...

  6. 最长上升子序列 II 时间复杂度(nlogn)

    题目:最长上升子序列 II 给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少. 输入格式 第一行包含整数 N. 第二行包含 N个整数,表示完整序列. 输出格式 输出一个整数,表示 ...

  7. @RestControllerAdvice全局异常统一处理

    spring项目中,我们通常规定了返回的格式(成功-失败-异常),特别是异常怎么处理方便呢? 1.自定义状态码实体 package com.ruoyi.common.constant; /** * 返 ...

  8. Python实现类别变量的独热编码(One-hot Encoding)

      本文介绍基于Python下OneHotEncoder与pd.get_dummies两种方法,实现机器学习中最优的编码方法--独热编码的方法. 目录 1 OneHotEncoder 2 pd.get ...

  9. 把Excel自动转换Json格式

    Excel表格转JSON      在实际工作中,我们常常使用Excel记录各种数据,但在各种应用系统传输数据却使用JSON格式,这就需要把Excel转为JSON.如果能把数据转换传输过程自动化就更完 ...

  10. CTF之WEB学习路线规划

    前言 受大佬Lzer0Kx(公众号:LK安全)启发,打算整一篇关于CTF-web的学习路线的分享.当然也算是给一些刚入门的小白的一些学习方向,不至于不知道学啥.废话少说,开整! 以下的所有内容属于我个 ...