如何使用VBA减去组合的命名范围

问题描述 投票:0回答:1

我找不到一种方法来减去命名范围内的数据。我根据以下屏幕在VBA中创建了三个命名范围:enter image description here

我有三个命名范围。我想做的是创建一个包含Data_1和Data_2的命名范围,然后从中减去Data_3。

我尝试过这样的事情:

Thisworkbook.names.add Name:="Data1and2", RefersTo:="=(" & Data_1 & "," & Data_2 & ")"
Thisworkbook.names.add Name:="FinalResult", RefersTo:="=" & Data1and2 & "-" & Data_3

这似乎可行,没有任何错误,但是结果是一个0的空白数组。例如,当我从Data_1中减去Data_3(因此没有合并的范围)时,它工作正常,但是一旦我将两个范围合并为一个命名范围,它就会停止工作。

我也尝试直接引用范围,而不是按名称而是地址,但这也不起作用。

有什么想法吗?

编辑:我已更改图片以更好地显示问题。范围Data_1和Data_2可能不相邻且不连续,这使此问题对我来说很成问题。我需要以某种方式将它们组合到一个范围内。这些范围之一也可以位于一列中,而另一范围将位于一行中(转置)。

excel vba named-ranges
1个回答
1
投票

要在VBA中创建FinalResult,请假定您已经存在三个数据范围:

.Add Name:="FinalResult", RefersTo:="=Data_1:Data_2-Data_3"

与您在工作表上手动输入的公式相同。

编辑

在您修改后的问题中,对于data_1和data_2,您现在具有非连续范围,也可能具有不同的形状。

如果您具有Windows桌面Excel的现代版本,并具有TEXTJOINFILTERXML函数,则可以使用以下公式:

FinalResult Refers To:  =FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,Data_1,Data_2) & "</s></t>","//s")-Data_3

如果Data_3Data_1Data_2的单元格数量不同,将返回错误,您可以对其进行测试。

因此,您的相关代码段将是:

   RefersTo:= "=FILTERXML(""<t><s>"" & TEXTJOIN(""</s><s>"",TRUE,Data_1,Data_2) & ""</s></t>"",""//s"")-Data_3"

    RefersTo:= "=IFERROR(FILTERXML(""<t><s>"" & TEXTJOIN(""</s><s>"",TRUE,Data_1,Data_2) & ""</s></t>"",""//s"")-Data_3,"""")"

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.