所以我有一系列包含Cell Addresses列表的单元格。
B栏& C显示信息块的开始和结束位置。 D列说明它是表的组合的开始,组合的结束,还是它是单个表。
所以基本上我在结合B&的答案时遇到了一些困难。 C形成组合范围。所以在图片中,E列显示A170开始,A596结束。 (我不认为这是必要的)我需要制作一个包含A170:A543,A548:A554等的范围,它需要是动态的。因此,这些应该根据D列中的值创建自己。我希望在VBA中执行此操作,但如果在Excel公式中更容易,那也没关系。
任何人都可以给我一些提示如何实现这一目标吗?我的大脑目前糊里糊涂。
答案 0 :(得分:1)
您可以创建一个小的用户定义函数(也称为UDF),它将非连续单元格区域与其各自地址的文本表示形式拼接在一起。这可以返回使用SUM function或COUNTA 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获得结束范围。如果您需要扩展功能以传递结束范围,那么您需要检查开始和结束范围是否相同。