Excel精英培训网

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

[已解决]根据合并区域计算

[复制链接]
发表于 2015-12-2 18:09 | 显示全部楼层 |阅读模式
我想实现,比如:Range("a1:b10")是合并的,那么Range("C1")等于Range("B1:B10")内数字之和,不知怎样写代码,请帮忙,谢谢
最佳答案
2015-12-2 20:20
Sub test()
    Dim r As Range, x, y, z

    Application.ScreenUpdating = False
    z = Range("b65536").End(xlUp).Row
    Range("a1:a" & z).Copy [c1]
    For Each r In Range("a1:a" & z)
        '如果r是合并单元格,且r地址等于r所在合并区域的首个单元格地址
        If r <> "" Or r.MergeCells And r.Address = r.MergeArea.Cells(1).Address Then
            x = r.MergeArea.Row
            y = x + r.MergeArea.Count - 1
            Cells(x, 3) = Application.Sum(Range(Cells(x, 2), Cells(y, 2)))
        End If
    Next r

    With Range("c1:c" & z)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
End Sub

试验3.rar (17.36 KB, 下载次数: 18)
45.png

试验.zip

12.08 KB, 下载次数: 2

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-12-2 19:15 | 显示全部楼层
Sub test()
    Dim rng As Range
    Dim x As Integer, y As Integer

    For Each rng In Range("a1:a" & Range("b65536").End(xlUp).Row)
        '如果 rng 是合并单元格,且 rng 地址等于 rng 所在合并区域的首个单元格地址
        If rng <> "" Or rng.MergeCells And rng.Address = rng.MergeArea.Cells(1).Address Then
            x = rng.MergeArea.Row
            y = x + rng.MergeArea.Count - 1
            Cells(y, 3) = getSum(x, y)
        End If
    Next rng
End Sub

Function getSum(x, y) As Integer
    Dim i, s
    For i = x To y
        s = s + Cells(i, 2)
    Next i
    getSum = s
End Function
试验2.rar (18.39 KB, 下载次数: 11)
回复

使用道具 举报

发表于 2015-12-2 20:00 | 显示全部楼层
爱疯 发表于 2015-12-2 19:15
Sub test()
    Dim rng As Range
    Dim x As Integer, y As Integer

老师如果这样呢
QQ图片20151202195434.png
回复

使用道具 举报

发表于 2015-12-2 20:20 | 显示全部楼层    本楼为最佳答案   
Sub test()
    Dim r As Range, x, y, z

    Application.ScreenUpdating = False
    z = Range("b65536").End(xlUp).Row
    Range("a1:a" & z).Copy [c1]
    For Each r In Range("a1:a" & z)
        '如果r是合并单元格,且r地址等于r所在合并区域的首个单元格地址
        If r <> "" Or r.MergeCells And r.Address = r.MergeArea.Cells(1).Address Then
            x = r.MergeArea.Row
            y = x + r.MergeArea.Count - 1
            Cells(x, 3) = Application.Sum(Range(Cells(x, 2), Cells(y, 2)))
        End If
    Next r

    With Range("c1:c" & z)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
End Sub

试验3.rar (17.36 KB, 下载次数: 18)

评分

参与人数 2 +2 收起 理由
一成不变变 + 1 赞一个!
amzxfgh9632 + 1 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 15:50 , Processed in 1.294937 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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