PDA

Vollständige Version anzeigen : Abstand zum nächsten Wert ausgeben lassen


Vigo2
28.06.2014, 08:55
Hallo zusammen!

Ich habe im Bereich B2:U2 Werte hinterlegt (hier x). Nun würde ich darunter gerne den Abstand zu dem jeweiligen nächsten x ausgeben lassen.
Ich hab auch einen Code geschrieben. Allerdings trägt er den Abstand des ersten x zum zweiten x unter dem zweiten x ein anstelle unter dem ersten x. Das ganze zieht sich dann durch wie ein roter Faden. Ich weiß nicht wie ich das im Code ändern kann. Ich hab eine Beispieldatei hochgeladen. Die rote Zeile stellt dar, wie es sein soll.
Habt ihr eine Idee, was ich im Code ändern muss? Ich würde mich über Tipps freuen!

Viele Grüße, Vigo2

Vigo2
28.06.2014, 09:24
Ich hab glaub ich das Problem gefunden, allerding noch keine Lösung.
Der bisherige Code lautete so:

Sub xy()

Dim start, ende, i As Long

'Abstand zwischen "x"sen ermitteln
start = 0
ende = 0
For i = 2 To 21
If Cells(2, i).Value = "x" Then
ende = start
start = i
If i > 2 Then
Cells(2, ende).Offset(1, 0).Value = start - ende
End If
End If
Next i

End Sub


Ich hab dann folgende Änderung vorgenommen:
Cells(2, ende).Offset(1, 0).Value = start - ende

Nun steht die Zahl unter dem richtigen x. Das Problem ist nun, dass er den Abstand von letzten x zum ersten x nicht berechnet.
Das muss hierran liegen:
For i = 2 To 21

Weiß soll man da machen???

Viele Grüße, Vigo2

aloys78
28.06.2014, 09:58
Hallo Vigo,

anbei mein Vorschlag:
Sub xy()
Dim start, ende, i As Long
'Abstand zwischen "x"sen ermitteln
start = 0
For i = 2 To 21
If Cells(2, i).Value = "x" Then
If start > 0 Then
Cells(3, start) = i - start
start = i
Else
start = i
End If
End If
If start > 0 Then
Cells(3, start) = 21 - start
End If
Next i
End Sub

Warum soll der letzte Wert 3 sein ?

Gruß
Aloys

Vigo2
28.06.2014, 10:12
Hallo Aloys!

Genau um diesen letzten Wert geht es:
hier soll der Abstand des letzten "x" zum ersten "x" berechnet werden.
Wenn da 2 steht dann berechnet er nur den Abstand bis zur letzten Zelle der Range(hier Spalte U).
Ich hatte schon überlegt, dass man vielleicht sagen muss, dass er diese Berechnung solange durchführen soll, bis er das erst gefundene "x" wieder erreicht hat. Dann würde i=2 to 21 doch als Loop behandelt werden oder???

Viele Grüße, Vigo2

aloys78
28.06.2014, 10:39
Hallo Vigo,

dann probier mal:
Option Explicit

Sub xy()
Dim start, erster, i As Long
'Abstand zwischen "x"sen ermitteln
start = 0
erster = 0
For i = 2 To 21
If Cells(2, i).Value = "x" Then
If start > 0 Then
Cells(3, start) = i - start
start = i
Else
start = i
erster = i
End If
End If
Next i
If start > 0 Then
Cells(3, start) = 21 - start + erster - 1
End If

End Sub


Gruß
Aloys

Vigo2
28.06.2014, 11:05
Das funktioniert super!!!

Vielen Dank, du hast meinen Samstag gerettet!

Viele Grüße, Vigo2