应用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

    '插入形成的数据行
    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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值