我找不到一种方法来减去命名范围内的数据。我根据以下屏幕在VBA中创建了三个命名范围:
我有三个命名范围。我想做的是创建一个包含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可能不相邻且不连续,这使此问题对我来说很成问题。我需要以某种方式将它们组合到一个范围内。这些范围之一也可以位于一列中,而另一范围将位于一行中(转置)。
要在VBA中创建FinalResult
,请假定您已经存在三个数据范围:
.Add Name:="FinalResult", RefersTo:="=Data_1:Data_2-Data_3"
与您在工作表上手动输入的公式相同。
编辑
在您修改后的问题中,对于data_1和data_2,您现在具有非连续范围,也可能具有不同的形状。
如果您具有Windows桌面Excel的现代版本,并具有TEXTJOIN
和FILTERXML
函数,则可以使用以下公式:
FinalResult Refers To: =FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,Data_1,Data_2) & "</s></t>","//s")-Data_3
如果Data_3
与Data_1
和Data_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,"""")"