2016-04-26 5 views
0

Wie kann der Abstand eines bestimmten Werts in einer Zelle zwischen den Zeilen gezählt und sein Durchschnitt berechnet werden? Ich habe 3000 Reihe von Werten oder mehr. Es ist schwierig, eins nach dem anderen zu zählen, denn es ändert sich nicht nur, es fügt auch immer neue Werte hinzu. Das gibt mir Kopfschmerzen. Ich würde es wirklich schätzen, wenn ein Genius das für mich in Excel VBA lösen könnte. Wenn jemand dies mit Array-Formel ohne Helferzellen erreichen kann, desto besser.Excel-VBA-Code zum Zählen der Abstände eines Werts zwischen den Zeilen und Berechnen des Durchschnitts

Ein kurzes Beispiel hier:

+0

zwischen den Reihen nicht Abstand sollte 5 und 3 2 statt 3? –

+0

@VincentG sollte es 3 Sir sein, weil ich ab dem Wert selbst zählen zählen will. Wenn der erste Wert auf B1 und der nächste auf B2 ist, sollte der resultierende Wert 2 sein, da wir angefangen haben, vom ersten Wert in Folge zu zählen. – vxpoisongas

Antwort

2

Weil ich das „Bösewicht“ letzte Mal bin ich werde ein tragfähiges UDF diesmal bieten:

Public Function AVROW(rng As Range, str As String) As Double 
    Set rng = Intersect(rng.Parent.UsedRange, rng) 
    If rng.Rows.Count < 2 Then Exit Function 
    Dim aCount As Long, aRow As Long, xCount As Long, xSum As Long 
    While Not IsNumeric(Application.Match(str, rng.Rows(aRow + 1), 0)) 
    aRow = aRow + 1 
    If aRow >= rng.Rows.Count Then Exit Function 
    Wend 
    Do 
    aRow = aRow + 1 
    aCount = aCount + 1 
    If IsNumeric(Application.Match(str, rng.Rows(aRow + 1), 0)) Then 
     xCount = xCount + 1 
     xSum = xSum + aCount + 1 
     aCount = 0 
    End If 
    Loop While aRow < rng.Rows.Count - 1 
    AVROW = xSum/xCount 
End Function 

Wenn Sie den Code Schritt ausführen, indem Schritt, sollte es selbsterklärend sein.
Wenn Sie jedoch noch irgendwelche Fragen haben, fragen Sie einfach :)

enter image description here

+1

Alles ist in Ordnung ... Sie sind immer noch willkommen;) –

1

Eine andere Möglichkeit, dies zu erreichen ist, wie unten

Public Function getaverage(r As Range, a As String) As Double 
    Dim avgg As Double 
    Dim matchount As Long 
    Dim newex As Long 
    For Each cell In r 
     If cell.Value = a Then 
      matchount = matchount + 1 
      If matchount = 1 Then 
       Start = cell.Row 
      Else 
       newex = cell.Row - (Start - 1) 
       avgg = avgg + newex 
       Start = cell.Row 
      End If 

     End If 
    Next 
    getaverage = avgg/(matchount - 1) 
End Function 

enter image description here

Verwandte Themen