2015-10-16 52 views
0

我已通過若干列運行,並自動執行計算,即使在目標字段中選擇的值等於0。跳過goalseek計算當目標= 0

我想子跳過goalseek功能每當我的工作表中出現「0」並轉到下一列時進行計算。

試圖添加If cell.Value > 0 And cell.Value <= cell.Offset(-1).Value Then _,但它沒有奏效。它只在所有單元中插入0。

這裏是我的代碼:

Sub Goalseek() 
    Dim rng As Range 
    Dim cell As Range 

    Set rng = ThisWorkbook.Worksheets("pb_input").Range("BB62:BP62") 
     rng.Offset(1).Value = 0 
    For Each cell In rng.Cells 
     If cell.Value <= cell.Offset(-1).Value Then _ 
     cell.Offset(2) = 1 Else _ 
     cell.Offset(2) = -1 
     cell.Goalseek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 
    Next 
End Sub 
+0

你能不能像顯示你的IF語句一樣放在模塊中?你的方法似乎是正確的,所以可能是一個語法問題 –

+0

也只是一個說明,你不應該使用_那樣;更難混淆的是創建單獨的行並使用END IF。我的直覺說你的其他If語句導致錯誤的類似問題。 –

+0

Hi @ Grade'Eh'Bacon。我不確定你的問題是什麼意思。我像往常一樣在模塊中運行代碼。依賴於行63和64的單元全部爲零。 – Saud

回答

0

無法添加新的職位(不得不等待90分鐘),所以我在這裏發佈的代碼:

Sub Goalseek() 
    Dim rng As Range 
    Dim cell As Range 

    Set rng = ThisWorkbook.Worksheets("pb_input").Range("BB62:BP62") 
     rng.Offset(1).Value = 0 
    For Each cell In rng.Cells 
     If cell.Value > 0 And cell.Value <= cell.Offset(-1).Value Then cell.Offset(2) = 1 Else cell.Offset(2) = -1 
     cell.Goalseek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 
    Next 
End Sub 

我得到以下消息如果我添加「結束時,如果」之前「下一步」:

「編譯錯誤:如果沒有結束塊如果」

0

它的Y我們的編碼風格導致了這個問題。如果您在一行上放置If聲明(並且您的下劃線字符表示這一點),那麼只有該行中的條件聲明將構成您的If子句。

在你的代碼

所以,

If cell.Value <= cell.Offset(-1).Value Then _ 
cell.Offset(2) = 1 Else _ 
cell.Offset(2) = -1 
cell.Goalseek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 

最後一行(你的Goalseek)將永遠是不管If條款的執行。

雖然不是一個規則,它通常是更好地把一個If ... End If塊中的代碼,那麼你的代碼應該是這樣的:

If cell.Value <= cell.Offset(-1).Value Then 
    cell.Offset(2) = 1 
Else 
    cell.Offset(2) = -1 
End If 
cell.Goalseek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 

這使得它更加明顯發生了什麼。所以你需要的代碼是:

If cell.Value > 0 Then 
    If cell.Value <= cell.Offset(-1).Value Then 
     cell.Offset(2) = 1 
    Else 
     cell.Offset(2) = -1 
    End If 
    cell.Goalseek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 
End If 
+0

嗨Ambie。謝謝您的回覆。我運行了代碼,它仍然在第62行有0的列的單元格中加0。 – Saud