应用VBA在Excel表中执行统计

临时接到一个Excel表,要执行统计工作,手工做法很麻烦,应用VBA稍微熟悉一点。

  很长时间不做的话就会陌生,写一点记录以备后查。
 1、在一个模块中定义结构体,用于记录数据,一般是针对一行一个结构体。

            ‘定义物料编码的结构体
        Public Type WZStruct
                 WLBM      As String           ‘物料编码
                 WLZ       As String           ‘物料组
                 WLMS      As String           ‘物料描述
                 DW        As String           ‘单位
                 WLSum2017 As Single           ‘计算统计的和
                 WLSum2018 As Single           ‘计算统计的和
                 WLSum2019 As Single           ‘计算统计的和
                 WL2017    As Integer          ‘统计2017个数
                 WL2018    As Integer          ‘统计2018个数
                 WL2019    As Integer          ‘统计2019个数
        End Type

        Public WZYQCY(6639) As WZStruct   ‘6639行数据

        2、常用的操作记录:

            ‘补全信息
                ‘先搜索2017表
                Sheets("2017年消耗").Activate
                For IFor = 1 To MaxFor
                                DoEvents
                                ‘1.取列表的物料编码
                                WZYQCY(IFor).WLBM = ListBox1.List(IFor)
                                ‘搜索物料编码所在的行
                                Set FindCellOK = Worksheets("2017年消耗").Columns("B").Find(what:=WZYQCY(IFor).WLBM)
                                If Not FindCellOK Is Nothing Then
                                        ‘2.物料组
                                        Range("A" + Trim(Str(FindCellOK.Cells.Row))).Select
                                        WZYQCY(IFor).WLZ = Selection.Formula
                                        ‘3.物料描述
                                        Range("C" + Trim(Str(FindCellOK.Cells.Row))).Select
                                        WZYQCY(IFor).WLMS = Selection.Formula
                                        ‘4.单位
                                        Range("D" + Trim(Str(FindCellOK.Cells.Row))).Select
                                        WZYQCY(IFor).DW = Selection.Formula
                                        ‘5.统计消耗量
                                        ‘WZYQCY(IFor).WLSum = Application.SumIf(Sheets("2017年消耗").Range("B2:B4386"), WZYQCY(IFor).WLBM, Sheets("2017年消耗").Range("F2:F4386"))
                                        ‘6.统计个数
                                        ‘WZYQCY(IFor).WL2017 = Application.CountIf(Sheets("2017年消耗").Range("B2:B4386"), WZYQCY(IFor).WLBM)
                                End If
                Next

                3、一般可以录制宏以后然后修改录制的编码,但是VBA里面略有不同。

‘插入形成的数据行
Sheets("小修1").Activate
For IFor = 1 To MaxFor
    ‘插入一个新行
    Range("A" + Trim(Str(IFor + 2))).Select
    Selection.Insert Shift:=xlDown
    ‘更新数据
    ‘序号
    Range("A" + Trim(Str(IFor + 2))).Select
    Selection.Formula = Str(IFor)
    ‘物料组
    Range("B" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).WLZ
    ‘物料编码
    Range("C" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).WLBM
    ‘物料描述
    Range("D" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).WLMS
    ‘单位
    Range("E" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).DW
    ‘2017年数据
    Range("G" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).WL2017
    ‘2018年数据
    Range("H" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).WL2018
    ‘2019年数据
    Range("I" + Trim(Str(IFor + 2))).Select
    Selection.Formula = WZYQCY(IFor).WL2019
Next

原文地址:https://blog.51cto.com/dawn0919/2449531

时间: 2024-10-13 01:31:30

应用VBA在Excel表中执行统计的相关文章

VBA取得EXCEL表格中的行数和列数

VBA取得EXCEL表格中的行数和列数 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数不确定的情况下.这样可以避免很多的错误,并且可以提高效率.但每次用到的时候到网上查找时,总是给了很多无用的答案,往往找不到想要的结果.笔者也是每次使用时,临时查找总是很头疼.偶然发现一篇博客,上面详细记录了不同的方法,笔者测试了几种发现真的很好用.本着分享万岁的精神,将博客内容共享出来.希望对大家有所帮助. 来源:http://www.okexcel.com.cn/bbs/vi

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

在Excel表中快速输入数据

我们平时在Excel表中总是要输入一些数据(比如:"对","错"等)信息,如果在一列中输入英文的话我们可能还是可以接受的,但是如果输入的中文,那么会不会很累呢?接下来我就告诉大家一个比较简单的办法,如何快速的输入数据: 我们首先打开以个Excel工作表,在该表中我们选择C列:如图1 图1 然后在"Home(开始)"选项中单击Number(数字)段旁边的小箭头:如图2 图2 弹出"format Cells(设置单元格格式)"对话

Android 添加数据到本地Excel表中

由于项目需要,今天学习了一下如何将程序里的数据添加到本地的Excel表中. 下面为学习笔记: 先上效果图: 首先,需要导入jxl.jar包到libs文件夹内. 然后创建Excel表,并往表里添加表头. // 创建excel表. public void createExcel(File file) { WritableSheet ws = null; try { if (!file.exists()) { // 创建表 wwb = Workbook.createWorkbook(file); //

用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中

现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法长时间做某种重复性的枯燥操作.想象这样一个场景,我们有个几千行的表要填,需要根据姓名输入其对应的身份证号,但之前我们已经做过一个类似的表,同样的一些人的姓名跟身份证号是完整的,那么我们就需要通过一个个查找姓名,然后把身份证号码复制到我们当前要做的表里去. 当我日复一日重复着这些操作的时候,我都很想有

cocos2dx3.2开发 RPG《Flighting》(三)从Excel表中加载需要的数据

一.前言 在一个游戏里面,需要用到的数据一般都是由游戏策划提供的(这里的策划还是由我自己担任啦哈哈).什么是需要用到的数据?例如我创建一个角色A,A有他自己的攻击力,防御力,速度等,再创建一个角色B,B也有自己的攻击力,防御力,速度等.每个角色都有一些基础属性,但是对应不同的角色,属性的值有可能不同.我们不可能在代码里面把这些数据写死.最好的办法是从一个文件(通常是Excel表格)中读入数据,这样就方便管理和修改. 二.正文 1.Excel <Flighting>游戏里面用到了4个Excel表

通过Navicat将Excel表中的数据导入到数据库

Navicat.Excel 1)首先创建测试表“student”,表结构为: 2)然后准备编写好的Excel数据表: 3)在Navicat选择student表,右键“导入向导”,弹出如下窗口,我们选择“Excel”: 4)点击“下一步”,“导入从”选择刚刚建好的Excel表,点击“下一步”,弹出如下窗口,这里注意选择好对应的“Sheet”: 5)点击“下一步”,进行一些设置: 6)点击“下一步”,选择已有的表还是新建表: 7)点击“下一步”,对应数据库中student表和excel表的栏位: 8

数据导入到excel表中

一.首先导入jar包:下载地址:http://download.csdn.net/detail/u011159417/9700784二.建立一个person类,(例如IP表)三.实现导出数据到excel表一共分为六步: 1.创建一个workbook对象,对应一个excel文件:HSSFWorkbook wb = new HSSFWorkbook(); 2.在workbook中,添加一个sheet:HSSFSheet sheet = wb.createSheet("sheet_test"

同一表中数据统计, 重复只显示一条, 根据一个字段显示多个统计结果;

从下面的表中根据标示统计出下面的页面效果, 本想用一条 sql 试了半天, 除了分组子查询都不行, 还是通过程序来解决这类问题; select t.workid,count(t.workid),t.status from t_st_kflist t where 1=1 group by t.workid,t.status; 共计3条数据; 搞了半天还是不可以, 看来 sql 是解决不聊了; 要求: 表中的workID即工号可以有多条(可以相同), 但是到了页面上显示就必须只能有一个workID,