2016-02-10 40 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