2013-02-01 38 views
0

背景:我有一個函數,它需要幾個範圍作爲輸入並進行一些計算。它被廣泛使用,所以我希望儘可能避免改變它。如何將運算符應用於Excel VBA中的範圍副本

但是,我現在需要使用相同的功能,但有一個範圍我需要讓它在範圍的負值等價操作。

我的問題是:有沒有簡單的方法來操作範圍的副本?(無需更改電子表格中的基礎源數據 - 我無法將所有值都轉化爲負值,只是在計算中需要)。

我試着寫一個簡單的函數(下面)。我不知道我是否以錯誤的方式思考VBA範圍,但是每當我分配它時,影響都會反映在源代碼中(例如,它以By Reference方式執行,而不是By Value,如果這樣做有意義這方面)

Function NegateRangeContents(rRange As Range) As Range 
    Dim r As Range 
    Dim rOutput As Range 

    Set rOutput = rRange 

    For Each r In rOutput 
    r.Value = -r.Value 
    Next r 

    Set NegateRangeContents = rOutput 
    Set r = Nothing 
    Set rOutput = Nothing 

End Function 

我沒有嘗試谷歌搜索的答案,並在這裏尋找類似的問題。

也許我錯過了一些明顯的東西,只需要更多的咖啡?!任何建議感激地接受!

+0

***我需要它在該範圍的負面等效。請問什麼是負面的? – bonCodigo

+0

範圍指出一個數字列表。該函數目前通過傳遞範圍並得出結果(在其他地方使用)來處理這些數字。我需要該函數來接受內容值乘以-1的範圍(即如果數字是5,6,22;那麼函數應該使用-5,-6,-22) – Neil

+0

'Set'設置參考到對象,所以這將始終工作ByRef而不是ByVal。關於[克隆對象](http://stackoverflow.com/questions/218696/cloning-objects-in-vba)的問題可能很有用,雖然它可能是矯枉過正。 –

回答

0

如果電流範圍是在Sheet 1

  • 首先拷貝到Sheet2(或任何新的空片,以具有該範圍的數據的副本)。
  • 將新的紙張範圍送入功能
  • 接下來進行所需的計算。相應輸出。

至於得到一個單元格的值的負值,試試這個:

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:真不知道你所說我需要有它的負面相當於操作是什麼意思範圍。如果你可以澄清它,我們可能能夠提供一個具體的解決方案...

+0

是的我想那會做。我希望不必在工作表本身創建任何東西,如果它可以在VBA中完成(在變量等),但它可能是最好的選擇。謝謝! – Neil

+0

請同時查看@Andrew指出的「克隆」,如果這對你有幫助或者你能適應代碼。如果您被卡住,請發佈適當的問題。 – bonCodigo