2017-04-19 36 views
1

我有这样的一段代码,现在前添加:VBA的Excel - 评估功能 - 如何复接

LR = Range("I" & Rows.Count).End(xlUp).Row 
    Range("P2:P" & LR) = Evaluate("I2:I" & LR & "*O2:O" & LR) 

正如你所看到的,这个代码复接从我列在相应的条目中的每个条目O栏,并把该值插入列P.

现在我需要修改这个代码,以便它与J列的那些和将从科拉姆我相应的值,然后乘以与来自列O.入门如果我只写这个

Range("P2:P" & LR) = Evaluate("I2:I" & LR & "J2:J" & LR & "*O2:O" & LR) 

它显然不起作用,因为它会在数学上将J与O相乘,然后再做出I和J的汇总。我怎么能告诉它先把I和J汇合在一起?

在此先感谢。

+2

使用括号! (5 + 3 * 2 = 5 + 6 = 11'和'(5 + 3)* 2 = 8 * 2 = 16'你应该在学校数学这是基本计算([操作顺序] //en.wikibooks.org/wiki/Arithmetic/Order_of_Operations))。 –

+0

我做过了,但是我在分号前添加了括号,但它不起作用。谢谢你,@Peh。 –

回答

2

由于@Peh在他的评论中写道,只需添加()为补充,以乘法前工作:

Range("P2:P" & LR).Value = Evaluate("(I2:I" & LR & "+J2:J" & LR & ")*O2:O" & LR) 
+0

谢谢。正如我在我的评论中提到的那样,我试图在分号前加上括号,但这种方法不起作用。 –

+0

@ D.Todor当你有太多''''和'('使用'Formula'字符串的'Debug.Print'时,你正在尝试(I Do) –

+2

@ShaiRado额外括号的任何理由?我记得明智的如果有人说“答案是完美的,如果你不能忽略任何东西而不改变意思”,那么你可以省略额外的括号,如sktneer在他的答案中没有改变数学! –

1

尝试像这样...

Range("P2:P" & LR) = Evaluate("(I2:I" & LR & "+J2:J" & LR & ")*O2:O" & LR) 
1
LR = Range("I" & Rows.Count).End(xlUp).Row 
Range("P2:P" & LR).formulaR1C1 = "=(RC[-7]+RC[-6])*RC[-1]" 

这将(I + J)* O