2013-04-15 56 views
1

我已經寫了解決一組的形式的代數方程的VBA代碼傳遞的行或列從片材至VBA函數

A(ⅰ)X(I-1)+ B(ⅰ)X (i)+ C(i)X(i + 1)= R(i)

函數的一部分在下面給出。目前,係數A,B,C和R必須存儲在主工作表的列中以傳遞給函數。有沒有一種方法可以提供係數以行或列的靈活性?

Function TRIDI(ByVal Ac As Range, ByVal Bc As Range, ByVal Cc As Range, _ 
ByVal Rc As Range) As Variant 
Dim BN As Single 
Dim i As Integer 
Dim II As Integer 
Dim A() As Single, B() As Single, C() As Single, R() As Single, X() As Single 
N = Ac.Rows.Count 
ReDim A(N), B(N), C(N), R(N), X(N) 
For i = 1 To N 
A(i) = Ac.Parent.Cells(Ac.Row + i - 1, Ac.Column) 
B(i) = Bc.Parent.Cells(Bc.Row + i - 1, Bc.Column) 
C(i) = Cc.Parent.Cells(Cc.Row + i - 1, Cc.Column) 
R(i) = Rc.Parent.Cells(Rc.Row + i - 1, Rc.Column) 
Next i 

回答

1

也許你可以給函數添加一個可選變量來表示列函數。

硒例如:(編輯)

Function TRIDI(ByVal Ac As Range, ByVal Bc As Range, ByVal Cc As Range, ByVal Rc As Range) As Variant 


    Dim BN As Single 
    Dim i As Integer 
    Dim II As Integer 
    Dim ColumnN As Boolean 
    Dim A() As Single, B() As Single, C() As Single, R() As Single, X() As Single 

    If Ac.Rows.Count = 1 Then 
     N = Ac.Columns.Count 
     ColumnN = True 
    Else If Ac.Columns.Count = 1 Then 
     N = Ac.Rows.Count 
    Else 
     Exit Function 
    End If 

    ReDim A(N), B(N), C(N), R(N), X(N) 

    If ColumnN = True Then 
     For i = 1 To N 

      A(i) = Ac.Parent.Cells(Ac.Row, Ac.Column + i - 1) 
      B(i) = Bc.Parent.Cells(Bc.Row, Bc.Column + i - 1) 
      C(i) = Cc.Parent.Cells(Cc.Row, Cc.Column + i - 1) 
      R(i) = Rc.Parent.Cells(Rc.Row, Rc.Column + i - 1) 

     Next i 
    Else 
     For i = 1 To N 

      A(i) = Ac.Parent.Cells(Ac.Row + i - 1, Ac.Column) 
      B(i) = Bc.Parent.Cells(Bc.Row + i - 1, Bc.Column) 
      C(i) = Cc.Parent.Cells(Cc.Row + i - 1, Cc.Column) 
      R(i) = Rc.Parent.Cells(Rc.Row + i - 1, Rc.Column) 

     Next i 
    End If 


End Function 

我可能會錯過一些在比如你的函數的功能,但我想你明白了吧。如果這不起作用,請給我反饋,並嘗試其他解決方案。 :)

編輯:您還可以使函數上面的函數接收輸入形式命名爲CTRIDI和RTRIDI的兩個其他函數。這兩個函數只是將真或假的值傳遞給列變量。

+0

謝謝奧萊 - 我希望有一個更通用的方法,對用戶透明。例如,如果您考慮MAX,AVERAGE等Excel函數,則可以將列中的數據傳遞給行或組合。這些如何獲得正確的價值? – bumedoc

+0

我現在在mac上,現在病情會在明天繼續,但是您可以檢查輸入範圍是多列還是多列,並且基於該條件變量。 –

+0

我已經編輯了我的答案,但代碼完全沒有經過測試,並且從我的頭頂開始。請也請澄清你的問題,你可以讓maby createa成爲你想要的結果的一個更好的例子嗎? –