有个朋友让帮忙看下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. 创建型模式 - 抽象工厂模式AbstractFactory

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 模式的定义与特点 抽象工厂模式.是一种为访问类提供一个创建一组相关或相关一类对象的接口,且访问类无需指定所要的产品的具体类,就能 ...

  2. 操作系统linux

    Linux命令概览 一.哪些地方可以学到Linux? 1.Linux中国 Linux中国绝对是学习Linux的好去处,各种资讯.文章.技术都有,而且更新及时,质量也很高,学Linux一定要去看啊. 2 ...

  3. hashlib加密、subprocess、logging日志模块

    1.hashlib加密模块 1.加密:将明文数据处理成密文数据,让人无法看懂 2.为什么加密:保证数据的安全 3.如何判断数据是否加密:如果是一长串没有规律的字符串(数字.字母.符号)那么数据被加密 ...

  4. vue 事件中央总线

    vue 事件中央总线 作用: 实现任意组件间的通信 实现的方法: 有以下两种方式 方式1: 全局事件总线 1.在main.js文件中定义 new Vue({ el: '#app', router, s ...

  5. python-最近面试遇到的代码题,mark一下

    1. 打印1000以内的质数 draft版本: def printlist(): a = [] for i in range(1, 1001): b.append(i) for j in range( ...

  6. JS逆向实战11——某金属集团动态cookie加密

    本文来自:来自: https://www.cnblogs.com/zichliang/ 目标网站 aHR0cDovL3d3dy50bm1nLmNvbS5jbi9pbmZvcm1hdGlvbi9pbmZ ...

  7. slate源码解析(一)- 序言

    笔者从大学时期就开始接触的前端,在刚去实习的时候就被导师安排去做内网的一个小富文本工具.之后从毕业后干的第一份工作游戏客户端,到现在做着可视化相关的前端工作,都有在做富文本相关的内容.可以说是和富文本 ...

  8. 高仿微信|基于Windows微信实现一个IM即时通讯App

    本文干货充足篇幅较长,建议收藏后阅读避免迷路.文末可获取[自动聊天机器人源码和Demo]. 即时通讯IM概述 如果能开发一款即时聊天App,能和微信消息互通,并且只需少许代码量,应该是件非常兴奋的事情 ...

  9. 腾讯云对象存储 COS搭建个人网站

    腾讯云对象存储 COS搭建个人网站,简单易操作,方便快捷.   只需要将你的网站资源上传即可,然后设置上你的自定义 CDN 加速域名,一个个人网站就上线啦!当然,你也可以不用设置自定义 CDN 加速域 ...

  10. Corundum:100G NIC学习(二)——仿真

    前情提要:搭建corundum仿真环境(一)https://www.cnblogs.com/shroud404/articles/15364812.html 三.Running test 接上文,梳理 ...