工具癖有些文章不一定是为了上首页投稿每周500字

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

2018-09-27  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读