Excel VBA实例

有个朋友让帮忙看下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

posted @ 2018-05-27 11:50  飞向梦  阅读(3815)  评论(0编辑  收藏  举报