发票自动凑数

发布时间:2018-07-27 09:38:51   来源:文档文库   
字号:

发票凑数

如果你是会计,是否曾遇到过需要在一大堆发票中凑出某一金额的发票数值来,通过人脑去凑数字真的是一件痛苦的事情,而且计算过程往往要耗费很长的时间,工作效率低下,这里提供一个快速凑发票金额的方法:

1、 打开Excel表格,按下图所示填写内容,其中B列为现实中你所拥有的实际发票单张面额,需求值为你需要凑出的金额,这里用1000示例,误差为你允许的金额误差,这里用误差为零,即我们需要凑出1000元整的金额。

2、 点击开发工具,点击Visual Basic按钮,打开VBA编辑窗口,

3、 右键点击左侧工程栏点击插入,模块,新建模块1

4、 点击模块1,将以下代码复制粘贴进右侧代码编辑栏

Sub MP()

Sheet1.Range("E2") = ""

Dim csh As Double

Dim brr() As Double

Dim SS As Integer

Dim MM As Integer

Dim HH As Integer

SS = Second(Time)

MM = Minute(Time)

HH = Hour(Time)

Dim diff As Double

diff = Sheet1.Cells(2, 4)

Dim zoci As Double

Dim ci As Integer

Dim DeVa As Double

Dim Weiba As Integer

DeVa = Sheet1.Cells(2, 3)

Dim jar As Double

Dim arr() As Double

Dim tot As Double

zoci = 0

ci = 0

jar = 0

Weiba = Sheet1.Cells(3000, 2).End(xlUp).Row

ReDim arr(2 To Weiba)

ReDim brr(1 To Weiba)

Dim MaVa As Double

Dim SeLaVa As Double

brr(1) = 0

For i = 2 To Weiba

arr(i) = Sheet1.Cells(i, 2)

brr(i) = arr(i)

Next

For i = 2 To Weiba - 1

For p = i + 1 To Weiba

If brr(i) > brr(p) Then

csh = brr(i)

brr(i) = brr(p)

brr(p) = csh

End If

Next

Next

For i = 2 To Weiba

Sheet1.Cells(i, 2) = brr(Weiba + 2 - i)

Next

For i = 1 To Weiba

tot = tot + brr(i)

Next

For i = 2 To Weiba

MaVa = MaVa + brr(i)

Next

SeLaVa = MaVa - brr(2)

If (DeVa >= brr(2) And DeVa <= SeLaVa) Or DeVa = MaVa Then

Call SB(DeVa, Weiba, 2, jar, ci, zoci, diff, arr(), brr(), tot)

Else

MsgBox "金额超限啦!请更改需求值或添加发票!"

End If

Debug.Print "耗时:" & Second(Time) - SS + (Minute(Time) - MM) * 60 + (Hour(Time) - HH) * 3600 & ""

End Sub

Sub SB(DeVa As Double, Weiba As Integer, x As Integer, jar As Double, ci As Integer, zoci As Double, diff As Double, arr() As Double, brr() As Double, tot As Double)

Dim caob As Double

Static caomm As Integer

For i = x To Weiba

ci = ci + 1

zoci = zoci + 1

jar = jar + arr(i)

Sheet1.Cells(i, 2).Interior.ColorIndex = 42

'Debug.Print zoci & "层次=" & ci & " " & "i=" & i & " " & "上一个jar=" & jar - Sheet1.Cells(i, 2), "jar=" & jar

If jar <= DeVa + diff And jar >= DeVa - diff Then

Sheet1.Cells(2, 5) = jar

Exit Sub

End If

If jar < DeVa + diff Then Call SB(DeVa, Weiba, i + 1, jar, ci, zoci, diff, arr(), brr(), tot)

If jar <= DeVa + diff And jar >= DeVa - diff Then

Sheet1.Cells(2, 5) = jar

Exit For

End If

Sheet1.Cells(i, 2).Interior.ColorIndex = -4142

jar = jar - arr(i)

ci = ci - 1

DoEvents

Next

If jar = 0 Then MsgBox "现有发票无法凑出所需金额,请增加发票数或增加误差值!"

End Sub

5、 点击开发工具,点击插入,点击下拉栏中的按钮标签,在表格中点击插入按钮,并命名为科学计算,下图所示。

6、 右键单击科学计算按钮,点击指定宏。

7、 在弹出的指定宏框中选中MP,并点击确定。

8、 保存表格,命名为发票凑数,保存类型选择下拉栏里的Excel启用宏的工作薄(*.xlsm)

9、 再次打开发票凑数表格,点击启用内容

10、 点击科学计算按钮,蓝色填充部分为参加进凑数计算得发票,按照颜色把实际发票挑出即为你所需要的凑数发票。

建议:因为科学计算随发票张数的增多,计算量呈指数增加,如果你的电脑配置比较低,请保证参加的发票数量尽量不要多余50张,如果发票数量实在是很多,可以在表格录入单张面额时,两张甚至三张相加当作一张录入到表格里,以减轻计算量。

如果你的Excel表格没有开发工具这一栏,可以按照下图所示添加,点击文件,点击选项,在打开的选项框中,选择自定义功能区,在右侧主选项卡中勾选中开发工具,并点击确定即可。

本文来源:https://www.2haoxitong.net/k/doc/93d08cd4c67da26925c52cc58bd63186bceb92d2.html

《发票自动凑数.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式