Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2826|回复: 9

[已解决]求用VBA在求出小计和合计,多谢

[复制链接]
发表于 2013-7-9 10:58 | 显示全部楼层 |阅读模式
本帖最后由 chensir 于 2013-7-11 16:39 编辑

求用VBA在求出小计和合计,多谢

一个是有规则的
一个是无规则的

见附件,多谢
最佳答案
2013-7-9 11:39
Sub test1()
    test2 [a1]
    test2 [f1]
End Sub


Sub test2(rng As Range)
    Dim A, i, x, y
    A = rng.CurrentRegion
    For i = 2 To UBound(A) - 1
        If A(i, 2) <> "小计" Then
            x = x + A(i, 4)
        Else
            A(i, 4) = x: y = y + x: x = 0
        End If
    Next i
    A(UBound(A), 4) = y
    rng.Resize(i - 1, UBound(A, 2)) = A
End Sub
合计行放公式.rar (15.01 KB, 下载次数: 48)

合计行放公式.rar

6.22 KB, 下载次数: 18

发表于 2013-7-9 11:24 | 显示全部楼层
本帖最后由 ppp710715 于 2013-7-9 11:26 编辑

规则的可用以下代码:
  1. Sub 规则小计()
  2. Dim i As Integer
  3. For i = 4 To 13 Step 3
  4. Range("d" & i).Select
  5.     ActiveCell.FormulaR1C1 = "=R[-1]C+R[-2]C"
  6.     Next
  7. Range("d14").Select
  8.     ActiveCell.FormulaR1C1 = "=SUMIF(C[-2],R[-1]C[-2],C)"
  9. End Sub
复制代码
回复

使用道具 举报

发表于 2013-7-9 11:39 | 显示全部楼层    本楼为最佳答案   
Sub test1()
    test2 [a1]
    test2 [f1]
End Sub


Sub test2(rng As Range)
    Dim A, i, x, y
    A = rng.CurrentRegion
    For i = 2 To UBound(A) - 1
        If A(i, 2) <> "小计" Then
            x = x + A(i, 4)
        Else
            A(i, 4) = x: y = y + x: x = 0
        End If
    Next i
    A(UBound(A), 4) = y
    rng.Resize(i - 1, UBound(A, 2)) = A
End Sub
合计行放公式.rar (15.01 KB, 下载次数: 48)

评分

参与人数 1 +14 收起 理由
chensir + 14 很给力! 就差个合计的

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-7-9 13:03 | 显示全部楼层
爱疯 发表于 2013-7-9 11:39
Sub test1()
    test2 [a1]
    test2 [f1]

多谢,合计如何做呢
回复

使用道具 举报

发表于 2013-7-9 14:23 | 显示全部楼层
chensir 发表于 2013-7-9 13:03
多谢,合计如何做呢

合计行放公式2.rar (15.26 KB, 下载次数: 17)
回复

使用道具 举报

发表于 2013-7-9 17:03 | 显示全部楼层
爱疯 发表于 2013-7-9 11:39
Sub test1()
    test2 [a1]
    test2 [f1]

合计为啥出不来?

点评

i-1使得输出时少了最后一行,5楼已更正  发表于 2013-7-9 17:08
回复

使用道具 举报

 楼主| 发表于 2013-7-11 16:31 | 显示全部楼层
爱疯 发表于 2013-7-9 11:39
Sub test1()
    test2 [a1]
    test2 [f1]

你好,问一下如果 E列再加个成绩2,代码会如何变化,

点评

要不再传一次修改后的附件吧,看过再好说  发表于 2013-7-11 16:35
回复

使用道具 举报

 楼主| 发表于 2013-7-11 16:48 | 显示全部楼层
爱疯 发表于 2013-7-9 14:23
rng.Resize(i - 1, UBound(A, 2)) = A
搞粗心了,这儿不应减1,已更正。

你好,附件改了,多谢
回复

使用道具 举报

发表于 2013-7-11 16:55 | 显示全部楼层
Sub test3()
    Dim A, i, j, s, n

    A = Range("b1:f" & Range("b65536").End(xlUp).Row)
    n = UBound(A)

    For j = 3 To UBound(A, 2)
        For i = 2 To n - 1
            If A(i, 1) <> "小计" Then
                s = s + A(i, j)
            Else
                A(i, j) = s
                A(n, j) = A(n, j) + s
                s = 0
            End If
        Next i
    Next j
   
    [b1].Resize(i, UBound(A, 2)) = A
End Sub
合计行放公式2.rar (14.24 KB, 下载次数: 42)

评分

参与人数 1 +18 收起 理由
chensir + 18 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-7-11 16:57 | 显示全部楼层
爱疯 发表于 2013-7-11 16:55
Sub test3()
    Dim A, i, j, s, n

多谢,多谢   

点评

没什么的  发表于 2013-7-11 16:59
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-17 05:38 , Processed in 0.274543 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表