そのため、他の誰かからいくつかのコード (以下) を継承し、それがどのように機能するかを理解しようとしています。私はコードの msot を理解しています (私は Access VBA にはかなり慣れていません) が、このコードが 1 つのポリシーのすべての情報をグループ化する方法がわかりません。
状況は以下の通りです。当社のデータベースから特定のポリシーのプレミアム データを取得するには、1 行につき 1 つのカバレッジを取得する必要があります。しかし、私はすべての保険料を、補償範囲ごとに 1 つずつ、すべて同じ行に入れたいと思っています。したがって、このコードは、多くの行を 1 行にまとめています。簡単にするために、合計 3 つのカバレッジに絞り込みましたが、さらに多くのカバレッジがあります。コードを読むと、特定のポリシーの 1、2、または 3 行が順番に並べられているように、1 つのポリシーのすべての情報がまとめられていると想定しているようです。しかし、たとえば、表を保険料 (金額) 列で並べ替えても、1 行で 1 つのポリシーのすべての保険料が得られます。これを機能させるコードのどこにもありません。コードは、ある行のポリシー番号を次の行のポリシー番号と比較しています。それらが同じである場合は、保険料をまとめます。それらが異なる場合は、しないでください。繰り返しますが、1 つのポリシーのレコードが一緒にならないようにテーブルを並べ替えることができますが、それでも最終結果は正しくなります。何か不足していますか?それはAccessの何かですか?助けてくれてありがとう!
Option Compare Database
Option Explicit
' Premium is imported with one row for each coverage per policy, so possibly several rows per policy.
' This procedure takes several rows per policy and makes them into one row.
Sub ScrubPremium()
Dim i As Long, j As Long, k As Long
Dim NumRecords As Long, found As Long, UniqueCount As Long
Dim tempPolicyNum As String, tempCoverage As String, tempPremium As Single
Dim PolicyNumArray() As String, PremiumArray() As Single, TotalPremiumArray() As Single
Dim db As DAO.Database
Set db = CurrentDb
Dim infile As Variant, outfile As Variant
Set infile = db.OpenRecordset("Imported Premium")
CurrentDb.Execute "DELETE * FROM [Finalized Premium]"
Set outfile = db.OpenRecordset("Finalized Premium")
NumRecords = infile.RecordCount
ReDim PolicyNumArray(NumRecords)
ReDim PremiumArray(NumRecords, 3)
ReDim TotalPremiumArray(NumRecords)
infile.MoveFirst
'initialize PremiumArray
For i = 1 To NumRecords
For j = 1 To NumPremiums
PremiumArray(i, j) = 0
Next j
Next i
'populate arrays
UniqueCount = 0
For i = 1 To NumRecords
tempPolicyNum = infile![Policy_Number]
tempCoverage = infile![Coverage]
tempPremium = infile![Premium]
k = 0
found = 0
Do Until k = UniqueCount Or found = 1 'check for unique policy
If tempPolicyNum = PolicyNumArray(k + 1) Then
found = 1
Else
k = k + 1
End If
Loop
If found = 0 Then
UniqueCount = UniqueCount + 1
PolicyNumArray(k + 1) = tempPolicyNum
End If
Select Case tempCoverage
Case "Comprehensive"
j = 1
Case "Collision"
j = 2
Case Else
j = 3
End Select
PremiumArray(k + 1, j) = PremiumArray(k + 1, j) + tempPremium
TotalPremiumArray(k + 1) = TotalPremiumArray(k + 1) + tempPremium
infile.MoveNext
Next i
'Populate table
For i = 1 To UniqueCount
outfile.AddNew
outfile![Full Policy Number] = PolicyNumArray(i)
outfile![Comp Premium] = PremiumArray(i, 1)
outfile![Coll Premium] = PremiumArray(i, 2)
outfile![Other Premium] = PremiumArray(i, 3)
outfile![Total Premium] = TotalPremiumArray(i)
outfile.Update
Next i
infile.Close
outfile.Close
End Sub