Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel VBA中将运算符应用于范围的副本_Vba_Excel_Operators - Fatal编程技术网

如何在Excel VBA中将运算符应用于范围的副本

如何在Excel VBA中将运算符应用于范围的副本,vba,excel,operators,Vba,Excel,Operators,背景:我有一个函数,它将几个范围作为输入并进行一些计算。它被广泛使用,所以如果可能的话,我希望避免改变它 然而,我现在需要使用相同的函数,但是对于其中一个量程,我需要让它在量程的负等效值上运行 我的问题是:有没有一种简单的方法可以对一个范围的副本进行操作?(如果不更改电子表格中的基础源数据,我无法将所有值都变成负值,这只是计算中需要的) 我试着写一个简单的函数(如下)。我不知道我是否以错误的方式考虑VBA范围,但每当我分配它时,影响都会反映在源上(即,它是以引用方式而不是通过值进行的,如果在这种

背景:我有一个函数,它将几个范围作为输入并进行一些计算。它被广泛使用,所以如果可能的话,我希望避免改变它

然而,我现在需要使用相同的函数,但是对于其中一个量程,我需要让它在量程的负等效值上运行

我的问题是:有没有一种简单的方法可以对一个范围的副本进行操作?(如果不更改电子表格中的基础源数据,我无法将所有值都变成负值,这只是计算中需要的)

我试着写一个简单的函数(如下)。我不知道我是否以错误的方式考虑VBA范围,但每当我分配它时,影响都会反映在源上(即,它是以引用方式而不是通过值进行的,如果在这种情况下有意义的话)

我试着在谷歌上搜索答案,并在这里寻找类似的问题


也许我错过了一些明显的东西,只是需要更多的咖啡?!任何建议都将被感激地接受

如果当前范围在
表1中

  • 首先将其复制到
    表2
    (或任何新的空白表中,以获得该范围数据的副本)
  • 将新的工作表范围输入函数
  • 接下来做你需要的计算。相应地输出
要获取单元格值的负值,请尝试以下操作:

For Each r In rOutput
    r.Value = r.Value - (r.Value * 2)
Next r

'-- eg. cell value = 2, the new value would be 2 - (2*2) = - 2

PS:真的不知道你说的是什么意思,我需要让它在范围的负当量上运行。如果你能澄清它,我们可能能够提供一个具体的解决方案…

我需要让它在范围的负当量上运行。?请问负当量是多少?范围指一系列数字。该函数当前通过传递范围来处理这些数字,并得出一个结果(在其他地方使用)。我需要函数接受一个范围,该范围的内容值乘以-1(即,如果数字是5、6、22;那么函数应该使用-5、-6、-22)
Set
设置对对象的引用,因此它总是按ref而不是按val工作。一个关于的问题可能有用,但可能有点过分。@Neil You函数似乎并没有说它不接受负值。。。只需使用
ByRef
。更好的是,你可以
乘以-1
。。。与我使用的笨拙的
x-(x*2)
相比,如果您想对这两种类型使用相同的函数,它如何知道其范围是“负”版本还是常规类型?该函数执行的是什么类型的操作?当你说你想避免修改它的时候,你大概是指算法而不是实际的代码,因为你需要做一些修改……是的,我想这样就可以了。我希望如果可以在VBA(变量等)中完成,就不必在工作表中创建任何内容,但这可能是最好的选择。谢谢如果这对你有帮助或者你能够适应代码的话,也请像@Andrew指出的那样研究
克隆
。如果你被卡住了,贴一个合适的问题。
For Each r In rOutput
    r.Value = r.Value - (r.Value * 2)
Next r

'-- eg. cell value = 2, the new value would be 2 - (2*2) = - 2