0

このExcelフィールドでMS-Excel式をシミュレートしようとしていました: A - StudyYears B - Inflation_Adjusted_Expenditures C - AnnualContribution D - ContributionIncrease E - InterestIncome F - RunningBalance

現在の Excel カーソル位置: 列 - F、行 - 3 数式: F2+E2+C2+B2

MS-Access SQL クエリに。別のテーブルから取得したフィールド。ただし、RunningBalance フィールドは、最初はテーブル tblParameter フィールド StartingBalance から取得されます。このクエリの次の RunningBalance レコードは、前のレコードから 4 つのフィールドを追加する必要があります。

循環参照はSQLクエリの問題であるため、このような関数を作成してみます。

'*************************************************************
' FUNCTION: PREV_RUNNINGBALANCE()
' PURPOSE: Retrieve a value from a field in the previous record.
' PARAMETERS:
'    StartingBalance    - Starting Running Balance which is given
'    RefValue           - ID value
' RETURN: The computed value for the 4 field mention located in the
'          previous record.
' EXAMPLE:
'    =Prev_RunningBalance(StudyYears, 404585)
'**************************************************************
Function Prev_RunningBalance(RefValue As Long, StartingBalance As Long)

Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String
Dim vRunningBalance As Integer

On Error GoTo Err_PrevRecVal
    strSQL = "Select Inflation_Adjusted_Expenditures, AnnualContribution, InterestIncome, RunningBalance FROM GenerateFundingPlanData WHERE StudyYears = " & RefValue

Set dbs = CurrentDb
Set rsSQL = db.OpenRecordset(strSQL, dbOpenDynaset)

rsSQL.FindFirst "StudyYears = " & RefValue

If Not rsSQL.NoMatch Then
    'Return 0
    Prev_RunningBalance = 0
End If

If rsSQL.BOF Then
    Prev_RunningBalance = 0
    'Prev_RunningBalance = rsSQL![Inflation_Adjusted_Expenditures] + rsSQL![AnnualContribution] + rsSQL![InterestIncome] + StartingBalance
End If

Do While Not rsSQL.BOF
    ' Move to the previous record.
    rsSQL.MovePrevious
    ' Sum the fields to get the RunningBalance
    ' RunningBalance = Inflation_Adjusted_Expenditures + AnnualContribution + InterestIncome + CurrentRunningBalance
    Prev_RunningBalance = rsSQL![Inflation_Adjusted_Expenditures] + rsSQL![AnnualContribution] + rsSQL![InterestIncome] + rsSQL![RunningBalance]
Loop

'Close Connection
rsSQL.Close

Bye_PrevRecVal:
    Set rsSQL = Nothing    'Deassign all objects.
    Set dbs = Nothing
Exit Function
   Err_PrevRecVal:
Resume Bye_PrevRecVal
End Function

関数を試した後、null の結果が得られます。これが私のクエリのサンプルです。

SELECT Prev_RunningBalance(a.StudyYears, 404585) as RunningBalance, 
       a.StudyYears FROM AnalysisYears a;

正しい機能を使用していますか?

指摘してください。ありがとうございました。

4

1 に答える 1