【问题标题】:How to subtract combined named ranges with VBA如何用 VBA 减去组合命名范围
【发布时间】:2020-05-21 08:54:11
【问题描述】:

我找不到在我的命名范围内减去数据的方法。 我根据以下屏幕在 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 可能不相邻且不连续,这就是使这个问题对我造成问题的原因。我需要以某种方式将它们组合成一个范围。这些范围之一也可以在一列中,而另一个将在一行中(转置)。

【问题讨论】:

  • 这可能是 XY 问题。你到底想做什么?你要逐个单元格的减法吗?
  • 静态值只是一个例子。它实际上可以是任何值。现在,我想在图表上绘制这个“FinalResult”。减法可以是任何类型的,只是为了确保它有效并且我得到正确的结果。

标签: excel vba named-ranges


【解决方案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 的单元格数量不同,则会返回错误,您可以进行测试。

因此,您的相关代码 sn-p 将是:

   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,"""")"

【讨论】:

  • 它有效,但仅适用于相邻且连续的范围。您知道如何对彼此分开的范围 Data_1 和 Data_2 执行此操作吗?数据_1 = A1:A3,数据_2 = D7:D9?
  • @RafałKowalski 这引发了一系列新问题。但请参阅我的编辑。
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 2017-10-01
  • 1970-01-01
  • 2021-11-20
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多