求助:用VBA做一个连续记录求和的函数,达到类似Execl表格的效果.
vba吧
全部回复
仅看楼主
level 2
dl_sjy 楼主
如图,前3列为表中数据,第4列(红色数据)为想通过函数求和数据.
尝试做的,但不好用!
Function Total(Code As String, DatF As Date, Xj As Single, n As Integer) As Double
Dim rs As DAO.Recordset
Dim Sql As String
Dim Total As Double
Dim Count As Integer
Total = 0
Count = 0
Sql = "SELECT Top " & n + 1 & " Dat,Dm,Xj FROM usysA WHERE Dm= '" & Code & "' ORDER BY Dat DESC"
Set rs = CurrentDb.OpenRecordset(Sql)
Do While Not rs.EOF
Total = Total + rs.Fields(1)
Count = Count + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Function
2024年07月06日 09点07分 1
level 2
dl_sjy 楼主
用上面的代码做查询,得出的结果如图:
2024年07月06日 09点07分 2
楼主这个结果h是错误的嘛
2024年07月06日 10点07分
对,结果是错误的,同时算出的数据不变,郁闷着呢.
2024年07月06日 12点07分
level 4
建议用区域for循环 不要用do while
2024年07月06日 10点07分 3
level 13
Excel是之前n=5个数的和吗?
vba。。参数是什么意义?靠猜吗
2024年07月06日 10点07分 4
在Excel表里的n=5,函数里的n可以自己选,可以是3,也可以是6.
2024年07月06日 12点07分
回复 dl_sjy :dm是什么,code是什么,T是什么,是不是公式
2024年07月06日 12点07分
code就是引用表里的dm,T是用函数计算出来的结果.Excel表里的是俺用公式拉出来的.
2024年07月06日 12点07分
@dl_sjy 下面有人贴了,你这是表名没写对吧,T里面n等于几
2024年07月06日 13点07分
level 1
没用数据库,直接excel里跑的
2024年07月06日 11点07分 5
高人,能把代码发给俺吗[玫瑰]?
2024年07月06日 12点07分
最好是Access的函数代码,毕竟用Excel不用这么麻烦,直接拉公式就可以了.
2024年07月06日 12点07分
@dl_sjy sql改了就行了,代码都在图里了,挡住的部分是合计字段。
2024年07月06日 12点07分
@jjbkkj 能发一张清晰点的代码图片吗?[呵呵]
2024年07月06日 12点07分
level 1
'n为第几个5个XJ1之和
Public Function Total(Code As String, n As Integer) As Double
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim Sql As String
Dim cnt As Integer
Dim strConn As String
Dim sum As Double
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0 Macro;HDR=YES'"
cn.Open strConn
Sql = "select top " & n + 4 & " * "
Sql = Sql & " from [usysA$]"
Sql = Sql & " WHERE Dm1 = '" & Code & "' order by Dat1 asc"
rs.CursorLocation = adUseClient
rs.Open Sql, cn, adOpenKeyset, adLockPessimistic
If rs.RecordCount < 5 Then
Exit Function
End If
rs.MoveFirst
rs.MoveLast
cnt = 0
sum = 0
Do While Not rs.EOF
sum = CDec(sum) + CDec(rs.Fields("XJ1"))
rs.MovePrevious
cnt = cnt + 1
If cnt >= 5 Then
Exit Do
End If
Loop
Total = sum
End Function
字段名字自己改下
2024年07月06日 13点07分 6
收到,谢谢!!
2024年07月06日 13点07分
level 1
access版
'n为第几个5个XJ1之和
Public Function Total(Code As String, n As Integer) As Double
Dim rs As DAO.Recordset
'Dim cn As New ADODB.Connection
Dim Sql As String
Dim cnt As Integer
Dim strConn As String
Dim sum As Double
' strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0 Macro;HDR=YES'"
' cn.Open strConn
'
If n < 1 Then
Exit Function
End If
Sql = "select top " & n + 4 & " * "
Sql = Sql & " from [表1]"
Sql = Sql & " WHERE Dm1 = '" & Code & "' order by Dat1 asc"
'rs.CursorLocation = adUseClient
'rs.Open Sql, cn, adOpenKeyset, adLockPessimistic
Set rs = CurrentDb.OpenRecordset(Sql)
rs.MoveFirst
rs.MoveLast
If rs.RecordCount < 5 Then
Exit Function
End If
cnt = 0
sum = 0
Do While Not rs.EOF
sum = CDec(sum) + CDec(rs.Fields("XJ1"))
rs.MovePrevious
cnt = cnt + 1
If cnt >= 5 Then
Exit Do
End If
Loop
Total = sum
End Function
2024年07月06日 13点07分 7
level 1
查询语句
select *,Total([Dm1],DCount("*","表1","[Dat1] <=
#" & [表1]![Dat1] & "#
" )-5) AS Tal from [表1]
效果如图
2024年07月06日 13点07分 8
level 1
2024年07月06日 14点07分 9
有劳了,测试过,结果有效,不过对于表中Dm种类多,数据量大的,不太适用.虽然如此,还是非常感谢!!
2024年07月06日 15点07分
1