如何用 VBA 减去组合的命名范围
How to subtract combined named ranges with VBA
我找不到一种方法来减去命名范围内的数据。
我根据以下屏幕在 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,"""")"
我找不到一种方法来减去命名范围内的数据。
我根据以下屏幕在 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,"""")"