2017-06-16 167 views
0

我有包含式相當多的細胞,然後用VBA這個公式的結果爲變量的值,如下所示:Excel公式內VBA

在片在細胞AS4

=SUMPRODUCT(MAX((ROW($AE$4:$AE$997))*($AE$4:$AE$997<>""))) 

,然後在我的VBA:

numRows = ws.Range("AS4").Value 

然而,這開始變得難以跟蹤哪些細胞是餵養哪個變量,避免覆蓋這些細胞的表通過對事故等

我需要能夠在VBA中執行此計算,如果我可以,刪除在我的工作表上有「計算單元格」的需要。

我發現有一種方法可以使用公式與WorksheetFunction,但只發現這個簡單的例子,並不能適應我的情況。

numRows = WorksheetFunction.SumProduct(MAX((ROW($AE$4:$AE$997))*($AE$4:$AE$997<>""))) 

是行不通的......

有沒有辦法做到這一點,還是我更好用報廢的配方和使用純VBA方法的想法?

+0

您可以使用評價函數'numRows行=評估(「= SUMPRODUCT(MAX((ROW($ AE $ 4:$ AE $ 997))*($ AE $ 4:$ AE $ 997 <>「」)))「)' – SJR

+0

謝謝,雖然我得到了'類型不匹配',但我認爲這不是預期的數值在'numRows'中,這是一個'Long'變量。我如何從中獲得價值? – Aurelius

+2

對不起,您需要將內部報價加倍[numRows = Evaluate(「= SUMPRODUCT(MAX((ROW($ AE $ 4:$ AE $ 997))*($ AE $ 4:$ AE $ 997 <>」「 「」)))「)' – SJR

回答

0

與SJR幫助,這是答案:

numRows = [=SUMPRODUCT(MAX((ROW(Weights!$AE$4:$AE$997))*(Weights!$AE$4:$AE$997<>"""")))] 

多一點研究告訴我,evaluate(" ")可剛剛更換用方括號[]。雖然,如果我有這個公式的混合變量或公式不是恆定的,那麼我將不得不使用Evaluate

我還需要將表格名稱添加到公式中,因爲此公式在工作表內不再起作用,並且AE4:AE997不再引用正確的工作表。

上加引號起來也是必要的,因爲它是代碼,並認爲"不同的公式在紙張上