1

次の形式の代数方程式のセットを解く VBA コードを作成しました。

A(i)X(i-1)+B(i)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
4

1 に答える 1

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 という名前の他の 2 つの関数から入力を受け取る関数の上に関数を作成することもできます。これら 2 つの関数は、列変数に真または偽のエーテルを渡すだけです。

于 2013-04-15T14:08:36.507 に答える