尝试从一组值创建范围

时间:2015-07-17 22:39:26

标签: excel vba excel-vba

所以我有一系列包含Cell Addresses列表的单元格。

enter image description here

B栏& C显示信息块的开始和结束位置。 D列说明它是表的组合的开始,组合的结束,还是它是单个表。

所以基本上我在结合B&的答案时遇到了一些困难。 C形成组合范围。所以在图片中,E列显示A170开始,A596结束。 (我不认为这是必要的)我需要制作一个包含A170:A543,A548:A554等的范围,它需要是动态的。因此,这些应该根据D列中的值创建自己。我希望在VBA中执行此操作,但如果在Excel公式中更容易,那也没关系。

任何人都可以给我一些提示如何实现这一目标吗?我的大脑目前糊里糊涂。

1 个答案:

答案 0 :(得分:1)

您可以创建一个小的用户定义函数(也称为UDF),它将非连续单元格区域与其各自地址的文本表示形式拼接在一起。这可以返回使用SUM functionCOUNTA function等单元格范围的本机工作表函数的范围(使用两个非常简单的示例)。

Function makeNoncontiguousRange(startRNGs As Range)
    Dim rng As Range, rUNION As Range

    For Each rng In startRNGs
        If rUNION Is Nothing Then
            Set rUNION = Range(rng.Value2, rng.Offset(0, 1).Value2)
        Else
            Set rUNION = Union(rUNION, Range(rng.Value2, rng.Offset(0, 1).Value2))
        End If
    Next rng

    'Debug.Print rUNION.Address
    Set makeNoncontiguousRange = rUNION
End Function

该功能可用于工作表,如

=SUM(makeNoncontiguousRange(B2:B4))

在您的数据示例中,这就像写作一样,

=SUM($A$170:$A$543,$A$548:$A$554,$A$558:$A$566)

请注意,我只是在B列的范围的开头传递,并使用.Offset获得结束范围。如果您需要扩展功能以传递结束范围,那么您需要检查开始和结束范围是否相同。

相关问题