2016-02-10 41 views
1

我正在嘗試使用步驟函數來描述曲線。這主要是由於其他方法不如此精確,其中數據點通過線性關係連接。 我有一個x值表。每個x值取,並與一個第二表,直到滿足以下條件:在循環移動時避免單元格說明

值2>值1

一旦實現,第二表被用來構建成線性關係,與我可以準確地計算出第一個值的實際結果,y值(假設y = f(x)),它被引入到最後一個表中。

此過程必須以完全相同的方式重複,但是從中取得第一個值的表以及包含結果的表從下面的表移至每個表迭代的右側。

我使用的代碼如下:

Sub alpha() 

    Dim a As Integer 
    a = 0 
Begin_Count: 
    a = a + 1 


    Dim l As Integer 
    For l = 1 To 13 

     'Check the first value 
     Val1 = Range(Chr(a + 66) & (l + 269)) 

     'Check the numbers to compare range 
     Dim i As Integer 
     For i = 1 To 12: 
      Val2 = Range(Chr(67) & (i + 284)) 
      If Val2 > Val1 = True Then 

       'Calculate Cl 
       dy = (Range("D" & (i + 284)) - Range("D" & (i + 283))) 
       dx = (Range("C" & (i + 284)) - Range("C" & (i + 283))) 
       x = (Val1 - Range("C" & (i + 283))) 
       y = Range("D" & (i + 283)) 

       Cl = ((dy/dx) * x) + y 

       'Insert Cl 
       Range(Chr(a + 66) & (l + 299)).Value = Cl 

       Exit For 
      End If 


     Next 


    Next 
    If a < 101 = True Then 
     GoTo Begin_Count 
    End If 

End Sub 

此代碼運行,直到它到達在其中從Excel細胞被標記爲「AA」的點,「AB」,等等,在其中碼給出錯誤。

任何人都可以幫我解決這個問題嗎?

回答

2

相反的:

Range(Chr(a + 66) & (l + 299)).Value = Cl 

使用

Cells(l+299, a).Value = Cl 

一般來說它更容易使用Cells()帶有兩個數字參數,而不是試圖創建一個地址字符串傳遞給Range(),特別是如果你」重新在一個單元格上工作。

1

只是一對夫婦的快速事情......

始終使用Option Explicit在你的代碼模塊。它迫使你聲明你的變量,並幫助避免交叉價值類型。

總是創建一個工作表對象,因此您可以「保證」您的代碼引用了哪個工作表。它使它更加清晰,尤其是當您涉及多個工作表時(可能不是現在,但稍後)。

最後,使用Cells(rowindex,columnindex)格式參考表格中的值。這樣你可以用數字來索引行和列。

Option Explicit 

sub alpha() 
    Dim ws as Worksheet 
    Dim a as Integer 
    Dim lrow as Integer, lcol as Integer 
    Dim irow as Integer, icol as Integer 
    Dim 

    Set ws = Activesheet 
    a = 0 

    Val1 = ws.Cells(lrow, lcol).value 
end sub 
+0

我這裏得到一個錯誤使用選項明確的時候,因爲它告訴我,VAL1沒有定義。但我沒有在那裏定義它嗎?除此之外,這些提示非常有用,謝謝! – user3604362