AW: Gruppierungsebene feststellen
07.08.2006 15:06:07
ingUR
Hallo, Erwin,
Deine Ergänzungen deuten schon ein Mal an, wohin die Rechnung gehen soll. Jedoch wäre es weeiter hilfreich, wenn Du die Ar der Datenquelle bzw. wie die Daten an die Prozedur übergeben werden, mitgeteilt hättest - vielleicht an Hand einer kleinen Beispieldatei.
So bleibt mir im ersten Anlauf nur Versuch, in dem ich annehme, dass die Daten sequentiell aus einem Datenvektor gelesen werden. Simuliert habe ich diesen Fall durch die Vorbelegung des eindimensionalen Datenfeldes inData, welches ich im ersten Teil der Prozedur fülle.
Sub FillRecords()
Dim inData() As String
Dim maxRecs As Integer, Level As Integer
Dim r As Long
maxRecs = 20 * 4 ' je Datensatz 4 Ebenen
ReDim inData(maxRecs)
'Datenfeldvorbelegung
'enthält "portionierte" Indexberechnung index = 4 * (rec - 1) + i
For rec = 1 To maxRecs / 4
For Level = 1 To 4
inData(4 * (rec - 1) + Level) = "Data(Rec=" & Mid(Str(rec), 2) & ";DE" & Level & ")"
Next Level
Next rec
Columns("B:C").Clear
'Berechnung der Zeile aus dem DatenFeldIndex rec
' r = RowInSheet = 4 + ((Int(rec / 4))) * 5 + Level-1
For rec = 1 To maxRecs
r = 3 + ((Int(rec / 4))) * 5
For Level = 1 To 4
Cells(r + Level, 2) = inData(rec - 1 + Level)
Next
rec = rec + 3
Next
'Berechnung der Zeile aus dem 'Level'
For rec = 1 To maxRecs
Level = rec - 4 * Int((rec - 1) / 4)
RecNr = Int((rec - 1) / 4) + 1
r = 3 + (RecNr - 1) * 5 + Level
Cells(r, 3) = inData(rec)
Next
'Levelbereichnung aus der zufällig gewählten Zelle-Zeile
Randomize
r = Int(Rnd * r)
Cells(r, 1).Select
r = ActiveCell.Row
Level = (r - 3) - 5 * Int((r - 3) / 5)
If Level < 1 Then
MsgBox "Keine Detailebene"
Else
MsgBox "DetailEbene Level" & Level
End If
End Sub
Ob Du hier etwas findest, was Du in Dein Projekt einbauen kannst, vermag ich nicht zu sagen, da es bestimmt auch noch andere Gesichtspunkte geben kann.
Gruß,
Uwe