试图从一组值中创build一个范围

所以我有一个包含单元地址列表的单元格范围。

在这里输入图像说明

B&C列显示一个信息块的开始和结束位置。 D列指出是否是表格组合的开始,组合的结束,还是单个表格。

所以基本上我在把B&C的答案结合起来形成一个组合的范围时有些困难。 所以在图片中,E栏显示起始为A170,结束为A596。 (我不认为这是必要的tbh)我需要做一个范围包含A170:A543,A548:A554等,它需要是dynamic的。 所以这些应该创build自己的基础上的D列的值。我期待在VBA中做到这一点,但如果在Excel公式中更容易做,也没关系。

任何人都可以给我一些提示如何做到这一点? 我的大脑目前正在发展。

您可以创build一个小型的用户定义函数(又名UDF),将它们各自地址的文本表示forms的非连续单元格范围拼接在一起。 这可以返回使用像SUM函数或COUNTA函数 (使用两个非常简单的示例)的单元格区域的本机工作表函数的范围。

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 

该function可以在工作表上使用,

 =SUM(makeNoncontiguousRange(B2:B4)) 

在你的数据样本中,这将像写作,

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

请注意,我只是通过B列的范围开始,并获得与.Offset的结束范围。 如果您需要扩展function以通过结束范围,则需要检查开始范围和结束范围是否大小相同。