有个朋友让帮忙看下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. oasys系统_JAVA代码审计

    oasys系统_JAVA代码审计 一.前言 oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目.可以看到该项目的资源文件中是mappers且pom. ...

  2. MySQL数据库报1055错误

    有点坑啊,当初装MySQL数据库的时候没有整配置文件,结果MySQL报1055错误的时候,网上的解决办法都说如果需要永久生效的话,只能通过改配置文件实现,but,我没有配置文件,蜜汁尴尬啊 1.已安装 ...

  3. vue @click的stop和prevent

    @click.stop 阻止事件冒泡 @click.prevent 阻止事件的默认行为 联合饿了吗UI使用的时候,el-table(主表)包含一个或多个子表时(el-tabs),点击右侧的编辑.删除时 ...

  4. Spring事务(Transaction)管理高级篇一栈式解决开发中遇到的事务问题

    Spring是目前Java开发中最流行的框架了,它的事务管理我们在开发中常常的用到,但是很多人不理解它事务的原理,导致开发中遇到事务方面的问题往往都要用很长的时间才能解决,下面就带着大家去深入了解Sp ...

  5. python3 os.getcwd()和os.path.realpath()区别

    在写一个android手机的自动化测试,用appium+python3,跟室友讨论拟定了一个框架,在写2个通用的简单模块时,遇到问题. 同一个目录下2个模块,driver.py(用于获取app 句柄) ...

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

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

  7. UnoCSS 简化 CSS 的书写

    CSS 样式太多,重复写 在学习 UnoCSS 之前,我提出几个问题: 你是否有过写完了 HTML 之后,跳转到 style 写 CSS 这样来回跳转的痛苦? 你是否有过不知道如何给节点取类名的痛苦( ...

  8. jquery获得标签的值或元素的内容

    例如: .html() 获取a标签中的i元素 console.error($("a[name=" + index + "]").html()); 设置a标签里的 ...

  9. c/c++ 2d矢量库

    Cairo Cairo is a 2D graphics library with support for multiple output devices. Currently supported o ...

  10. spring boot 3.x 配置spring security

    参考文章:https://spring.io/guides/gs/securing-web/ 导入maven <dependency> <groupId>org.springf ...