excel bis und ab bestimmten wert verwenden

kon

Grünschnabel
hallo,

ich hab ein problem beim einlesen von excel daten ins vba. ich habe eine spalte mit 48 zeilen und will diese nun erst in 6 bereiche mit jeweils 8 zeilen trennen. dann will ich diese bereiche mit 8 zeilen nochmals unterteilen in einen bereich vor dem maximal wert in diesem 8er bereich und in einen teil nach dem max wert in dem 8er bereich. also hätte ich am ende 16 bereiche...
die daten sind so aufgebaut dass sie von der ersten weg ansteigen bis zum max ( etwa der 4. oder 5. wert) und dann wieder fallen bis zum 8. wert. daraufhin beginnen die daten in zeile 9 wieder zu steigen bis zum max dieses 8er blocks und dann wieder fallen bis sie in zeile 17 wieder steigen...
hoffe hab mein problem gut darstellen können
wär super und voll nett wenn mir jemand helfen könnte...

vielen dank schon mal im voraus

kon
 
Hi kon.
Könntest du nitte dein Text noch mit Satzzeichen versehen? Ist sehr schwer zu lesen.

item: Der Max-Wert wird dabei weggeworfen, da du ja die Zaheln favon und die Zahlen danach haben willst.

item: Wie soll denn die Unterteilung aussehen? Einfärben? Umrahmen? Irgendwohin kopieren? Leerzeilen einfügen?

Nachtrag:
Ein schnelles kleines Beispiel für 3 Achterblöcke
Visual Basic:
Public Sub test()
    Dim sh As Worksheet
    Dim rowNr
    Dim blockStart As Long
    Dim lastValue As Long
    
    Const C_BLOCK_LENGTH As Integer = 8
    Const C_BLOCK_COUNT As Integer = 3
    
    Set sh = ActiveSheet
    
    For blockNr = 1 To C_BLOCK_COUNT
        lastValue = -99999
        blockStart = (blockNr - 1) * C_BLOCK_LENGTH
        For rowNr = blockStart + 1 To blockStart + C_BLOCK_LENGTH
            If lastValue < sh.Cells(rowNr, 1) Then
                '//TODO: Steigend
                Debug.Print "Steigend: Row" & rowNr & " (Value " & sh.Cells(rowNr, 1) & ")"
            Else
                '//TODO: Absteigned
                Debug.Print "Absteigend: Row " & rowNr & " (Value " & sh.Cells(rowNr, 1) & ")"
            End If
            lastValue = sh.Cells(rowNr, 1)
        Next rowNr
        '//TODO: Next Block
        Debug.Print "Next Block"
    Next blockNr
End Sub

Code:
Steigend: Row1 (Value 1)
Steigend: Row2 (Value 2)
Steigend: Row3 (Value 3)
Steigend: Row4 (Value 4)
Steigend: Row5 (Value 5)
Absteigend: Row 6 (Value 4)
Absteigend: Row 7 (Value 3)
Absteigend: Row 8 (Value 2)
Next Block
Steigend: Row9 (Value 5)
Steigend: Row10 (Value 6)
Steigend: Row11 (Value 7)
Absteigend: Row 12 (Value 6)
Absteigend: Row 13 (Value 5)
Absteigend: Row 14 (Value 4)
Absteigend: Row 15 (Value 3)
Absteigend: Row 16 (Value 2)
Next Block
Steigend: Row17 (Value 3)
Steigend: Row18 (Value 4)
Steigend: Row19 (Value 5)
Steigend: Row20 (Value 6)
Steigend: Row21 (Value 7)
Steigend: Row22 (Value 8)
Absteigend: Row 23 (Value 7)
Absteigend: Row 24 (Value 6)
Next Block
 
ok mach ich...
schon mal vielen dank

ich will aus diesen kleinen blocks, die ich jeweils vor max und nach max bekomme die beiden werte suchen, die am nähesten an 0,6. d.h. den ersten unter und den ersten über 0.6.
die werte sind zb 0.47, 0.55, 0.61, 0.67, 0.71, 0.68, 0.62, 0.56.
Die Differenz der beiden werte dann linear in gleich große teile (schrittweite 0.01) zerlegen und aus diesen dann genau die schritte bis o,6 finden.

geht das?
 
Nur zum verstehen

Du hast die Reihe: 0.47, 0.55, 0.61, 0.67, 0.71, 0.68, 0.62, 0.56.
das Maximum ist 0.71
Nun suchst du einmal im steigenden Teil die 2 Zahlen 0.55 und 0.61
Dasselbeim sinkenden; 0.62 und 0.56

In diesen Zeilen willst du jetzt alle Wert im 0.01er Schritt.

Ausgabe
0.55, 0.56, ... 0.61
0.62, 0.51, ... 0.56

Ist das Richtig so?
 
So auf die schnelle - geht sicher auch noch eleganter
Visual Basic:
'Die Aktuelle Richtung
Private Enum eDirection
    edSteigend
    edSinkend
End Enum
'Wertpaar
Private Type tBevorAfterValues
    lower As Double
    higher As Double
End Type

Private Const C_BLOCK_LENGTH As Integer = 8
Private Const C_BLOCK_COUNT As Integer = 1
Private Const C_VALUE As Double = 0.6
Private Const C_OUT_STEP As Double = 0.01


Public Sub test()
    Dim rowNr       As Long
    Dim blockStart  As Long
    Dim lastValue   As Double
    Dim valuesBA(1) As tBevorAfterValues
    Dim actValue    As Double
    Dim i           As Double
    
    For blockNr = 1 To C_BLOCK_COUNT
        'Variablen neu initialisieren
        lastValue = 0
        valuesBA(edSteigend).higher = 1
        valuesBA(edSinkend).higher = 1
        blockStart = (blockNr - 1) * C_BLOCK_LENGTH
        
        For rowNr = blockStart + 1 To blockStart + C_BLOCK_LENGTH
            actValue = ActiveSheet.Cells(rowNr, 1)
            If lastValue < actValue Then
            'Steigend
                Call setV(valuesBA, actValue, edSteigend)
            Else
            'Sinkend
                Call setV(valuesBA, actValue, edSinkend)
            End If
            lastValue = actValue
        Next rowNr
        '//TODO: Next Block
        
        'Werte in 001er Schritten ausgeben
        Debug.Print "Steigend:"
        For i = valuesBA(edSteigend).lower To valuesBA(edSteigend).higher + C_OUT_STEP Step C_OUT_STEP
            Debug.Print i
        Next
    
        'Ausgabe:
        Debug.Print "Sinkend:"
        For i = valuesBA(edSinkend).higher To valuesBA(edSinkend).lower - C_OUT_STEP Step -1 * C_OUT_STEP
            Debug.Print i
        Next
    
        Debug.Print "Block fertig"
    Next blockNr
    
    
End Sub

Private Sub setV( _
        ByRef ioValuesBX() As tBevorAfterValues, _
        ByVal iActValue As Double, _
        ByVal iDirection As eDirection _
)

    If C_VALUE > iActValue Then
    'Vor dem Wert 0.6
        'Wenn der neue Wert höher ist als der bisherige, den neuen übernehmen
        If iActValue > ioValuesBX(iDirection).lower Then ioValuesBX(iDirection).lower = iActValue
    Else
    'Nach dem Wert 0.6
        'Wenn der neue Wert kleiner ist als der bisherige, den neuen übernehmen
        If iActValue < ioValuesBX(iDirection).higher Then ioValuesBX(iDirection).higher = iActValue
    End If


End Sub
Ausgabe:
Code:
Steigend:
 0.55 
 0.56 
 0.57 
 0.58 
 0.59 
 0.6 
 0.61 
Sinkend:
 0.62 
 0.61 
 0.6 
 0.59 
 0.58 
 0.57 
 0.56 
Block fertig
 

Neue Beiträge

Zurück