VBA字典数组运用实例(工资核算)

作者: 猛犸象和剑齿虎 | 来源:发表于2018-09-27 18:52 被阅读34次

    四月份,从软件岗位调到成本核算岗位,工作一下就忙碌起来,平时很忙,月底更忙,有时候不得不感叹命运的无奈。

    我从事于一个制造代加工企业,产品更迭快,各种临时订单加塞,计划往往跟不上变化。而公司的结构又类似古代宋朝,岗位分的很细,管事儿的人多,又不专职干本职工作,各种穿插岗位,弄的工作很多,其实有大量的重复性工作,但还是必须得做。

    在刚接这岗位时候交接出了点问题,先是同事突然离职,又内部轮岗,就一抹黑地只能自己摸索。

    起初是做一张大表,把各种基础数据怎么方便怎么输进去,由于之前了解点数据透视表和一些函数,所以表做的尽管不太规范,但胜在方便,各种基础数据录入一遍就可以,后期还能汇总。

    就像这篇文第一张图,我把成本表和工资放在一起,但看工资部分是不规范的,没办法直接用透视表,我之前的办法是把工资部分复制粘贴出去,然后规整成能透视的表,再汇总,熟练了也不耗用多少时间,最多半小时就能做完。

    但时间真的很紧,如果不想加班(加班没加班费),只能尽可能的开发自己了,怎样减少工作时间,于是接触了vba。下面是我编的代码,思路很简单,先是把生产人员和对应的工资装入数组,再用字典功能汇总。由于人名全手录,总会有点错误,还得改,用数据有效性的下拉菜单会好点,但我用的时候总会碰到点特殊情况。

    万恶的月底又来了,盘点,分摊,想想都头大,目标是把成本核算一键搞定。

    我是vba初学者,欢迎大家批评指正。

    Sub 效益工资汇总()

    Dim d As Object, arr, arr1, arr2, arr3, arr4, arrr(), rrow&, aa&, bb&, cc&, dd&, ee&, n%, n1%, n2%, n3%, m&

    Set d = CreateObject("scripting.dictionary")

    rrow = Worksheets("成本数据录入").[a63356].End(xlUp).Row

    arr = Worksheets("成本数据录入").Range("ay2:az" & rrow)

    arr1 = Worksheets("成本数据录入").Range("ba2:bb" & rrow)

    arr2 = Worksheets("成本数据录入").Range("bc2:bd" & rrow)

    arr3 = Worksheets("成本数据录入").Range("be2:bf" & rrow)

    arr4 = Worksheets("成本数据录入").Range("bg2:bh" & rrow)

    ReDim Preserve arrr(1 To UBound(arr) * 5, 1 To 2)

    For aa = 1 To UBound(arr)

    arrr(aa, 1) = arr(aa, 1)

    arrr(aa, 2) = arr(aa, 2)

    Next

    For bb = UBound(arr) + 1 To UBound(arr1) * 2

    n = n + 1

    arrr(bb, 1) = arr1(n, 1)

    arrr(bb, 2) = arr1(n, 2)

    Next

    For cc = UBound(arr1) * 2 + 1 To UBound(arr2) * 3

    n1 = n1 + 1

    arrr(cc, 1) = arr2(n1, 1)

    arrr(cc, 2) = arr2(n1, 2)

    Next

    For dd = UBound(arr2) * 3 + 1 To UBound(arr3) * 4

    n2 = n2 + 1

    arrr(dd, 1) = arr3(n2, 1)

    arrr(dd, 2) = arr3(n2, 2)

    Next

    For ee = UBound(arr3) * 4 + 1 To UBound(arr4) * 5

    n3 = n3 + 1

    arrr(ee, 1) = arr4(n3, 1)

    arrr(ee, 2) = arr4(n3, 2)

    Next

    Columns("a:b").Clear

    On Error Resume Next

    For m = 1 To UBound(arrr)

    d(arrr(m, 1)) = d(arrr(m, 1)) + arrr(m, 2)

    Next

    [a1:b1] = Array("生产人员", "效益工资")

    Range("a2:a" & d.Count) = Application.Transpose(d.keys)

    Range("b2:b" & d.Count) = Application.Transpose(d.items)

    Set d = Nothing

    End Sub

    相关文章

      网友评论

        本文标题:VBA字典数组运用实例(工资核算)

        本文链接:https://www.haomeiwen.com/subject/plnsoftx.html