Array Berechnungen

Bild

Betrifft: Array Berechnungen
von: Enrico
Geschrieben am: 20.04.2015 09:10:44

Hallo zusammen
ich muss in einer Tabelle ein paar Werte berechnen.
Als Array Neuling habe ich versucht dies mit einem Array zu tun.
Leider komm ich nicht wirklich vorwärts.
Die Daten liegen in folgendem Format vor.
A | C | 2
A | C | 2
A | D | 30
A | D | 30
B | C | 400
B | C | 400
B | D | 5000
B | D | 5000
Natürlich sind es deutlich mehr Daten und sortiert sind sie auch nicht.
Ziel ist es nun mittels Array von jeder Kombination (AC,AD,BC,BD) den Mittelwert aus Spalte 3 zu berechnen.
Als erstes müsste also jede vorhandene Kombination ermittelt werden, dann die Werte zugeordnet und am Ende der Mittelwert berechnet werden.
Klingt einfach ... aber ich komm nicht weiter.
Hab bisher im Forum gefunden wie ich die verschiedenen Kombinationen auslese.
Set Dic = CreateObject("Scripting.Dictionary")
For L = 1 To UBound(myAR)
Dic(myAR(L, 1)) = 0
Next
myAR2 = Dic.keys
Wäre über ein paar Anregungen dankbar.
Mfg Enrico

Bild

Betrifft: AW: Array Berechnungen
von: Nepumuk
Geschrieben am: 20.04.2015 09:52:27
Hallo,
da du nicht schreibst wo die Werte ausgegeben werden sollen, zeige ich sie im Direktfenster an:

Option Explicit

Public Sub Test()
    Dim lngRow As Long
    Dim alngValues() As Long, ialngIndex As Long
    Dim avntValues As Variant, avntKeys As Variant, avntItems As Variant
    Dim strTemp As String
    Dim objDictionay As Object
    Set objDictionay = CreateObject("Scripting.Dictionary")
    avntValues = Range(Cells(1, 1), Cells(Rows.Count, 3).End(xlUp)).Value2
    For lngRow = 1 To UBound(avntValues)
        strTemp = Trim$(avntValues(lngRow, 1)) & Trim$(avntValues(lngRow, 2))
        If objDictionay.Exists(strTemp) Then
            alngValues(1, objDictionay(strTemp)) = _
                alngValues(1, objDictionay(strTemp)) + avntValues(lngRow, 3)
            alngValues(2, objDictionay(strTemp)) = _
                alngValues(2, objDictionay(strTemp)) + 1
        Else
            ialngIndex = ialngIndex + 1
            Redim Preserve alngValues(1 To 2, 1 To ialngIndex)
            objDictionay(strTemp) = ialngIndex
            alngValues(1, ialngIndex) = avntValues(lngRow, 3)
            alngValues(2, ialngIndex) = 1
        End If
    Next
    avntKeys = objDictionay.keys
    avntItems = objDictionay.Items
    Set objDictionay = Nothing
    For ialngIndex = 0 To UBound(avntKeys)
        Debug.Print avntKeys(ialngIndex), alngValues(1, avntItems(ialngIndex)) / _
            alngValues(2, avntItems(ialngIndex))
    Next
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Array Berechnungen
von: Enrico
Geschrieben am: 20.04.2015 10:20:14
Vielen Dank
Das funktioniert erst mal.
Ich werde noch ein paar Anpassungen vornehmen und mich melden, wenn ich noch ein paar Fragen haben.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Array Berechnungen"