zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mysql性能优化
    java技术路线
    浅谈分布式事务
    java图片压缩
    centos6.8 固定IP
    Mybatis批量插入返回自增主键(转)
    MySQL创建用户的三种方法 (并授权)转
    MyBatis SQL xml处理小于号与大于号
    MySQL数据库引擎MyISAM和InnoDB的区别介绍
    Gson学习文档
  • 原文地址:https://www.cnblogs.com/quantumplan/p/9095565.html
Copyright © 2011-2022 走看看