PDA

Vollständige Version anzeigen : rel. Verweis auf die nächste gefüllte Zelle


Lealo
02.04.2012, 08:27
Hallo Leute

Ich habe wieder mal ein Problem.
Ich schreibe eine Makro und die sollte folgendermassen funktionieren:

Die Makro sucht zuerst die Zellen, in denen "In Criteria Count" steht (in Spalte D). Hat es die gefunden, springt es eine Zelle nach rechts (Spalte F, da merged cells) und schaut dort, ob der Wert der Zelle grösser als 0 ist. Ist das der Fall, dann soll die Makro in die nächste obere gefüllte Zelle in der Spalte B springen. Sie muss also 4 Zellen nach links und x Zellen nach oben. Wie krieg ich ne Formel für das x raus?

Bis jetzt sieht mein Code so aus:

For i = 1 To myDataRows
If Cells.Find("In Criteria Count") Then
If ActiveCell.Offset(0, 1).Value > 0 Then
ActiveCell.Offset(x, -4) = mySL1


Liebe Grüsse
Lealo

Lealo
02.04.2012, 08:28
Sorry für den Doppelpost. Es hat mir beim ersten angezeigt, der Sicherheitscode wäre falsch - anscheinend war er aber richtig.

Tut mir echt Leid!

hary
02.04.2012, 08:56
Hallo
Teste mal, ob ich's richtig verstanden habe. Es fehlt noch die varibelen deklaration von myDataRows und mySL1
Dim i As Long
Dim x As Long
For i = 1 To myDataRows
If Cells(i, 4) = "In Criteria Count" Then
If Cells(i, 4).Offset(0, 1).Value > 0 Then
x = Cells(Cells(i, 4).Row, 2).End(xlUp).Row
Cells(x, 2) = mySL1
End If
End If
Next
gruss hary

Lealo
02.04.2012, 09:17
Hallo hary

Danke für deine schnelle Antwort.
Ja also ich denke du hast es verstanden :)

Es hat so weit funktioniert, dass es zuerst "In Criteria Count" sucht und dann schaut ob die Zelle rechts davon den Wert grösser 0 hat. Dann geht es auch zu der oberen Zelle B, die gefüllt ist. Aber dann löscht es den Inhalt und mySL1 ist "empty"...

Dann habe ich eine weitere Frage.
Das "In Criteria Count" kann mehrmals vorkommen (bis zu 6mal). Und dann müssten die nächsten Zellen oben in B mySL1, mySL2, mySL3 etc. heissen. Hast du eine Idee, wie man das machen könnte?

Liebe Grüsse
Lealo

Lealo
02.04.2012, 09:25
Also, habs nochmals genauer getestet. Wenn ich es Schritt für Schritt durchlaufe (F8), dann gibt es mir für x die Zeile 16, was korrekt ist. Das heisst Cells(x,2) müsste stimmten. Aber sobald ich weiter mache, löscht es mir den Inhalt von der Zelle B16...

Liebe Grüsse
Lealo

hary
02.04.2012, 09:29
Hallo
Dies hat mich schon stuzig gemacht :-)
dann soll die Makro in die nächste obere gefüllte Zelle in der Spalte B springen
Du meinst in die naechste freie, gell. ;-)
dann
x = Cells(Cells(i, 4).Row, 2).End(xlUp).Row +1

gruss hary

hary
02.04.2012, 09:36
Hallo
Was ist mySL Text oder etwas anderes

Dim i As Long
Dim x As Long
Dim zaehler As Long
zaehler = 1
For i = 1 To myDataRows
If Cells(i, 4) = "In Criteria Count" Then
If Cells(i, 4).Offset(0, 1).Value > 0 Then
x = Cells(Cells(i, 4).Row, 2).End(xlUp).Row + 1
Cells(x, 2) = "mySL" & zaehler
zaehler = zaehler + 1
End If
End If
Next
gruss hary

Lealo
02.04.2012, 09:41
Hallo hary

Also nein, die Makro soll die nächste obere Zelle in B finden, in der was steht und diesen Text dann als Variable mySL1 speichern. mySL ist Text, ja.

Okay, dein zweiter Beitrag war für die verschieden mySL's, richtig?!

Liebe Grüsse
Lealo

Lealo
02.04.2012, 09:49
Hary, ich habe herausgefunden, dass mein Code, so wie er unten angehängt ist, den Wert in B ersetzt mit mySL + Zaehler...


Zaehler = 1
For i = 1 To myDataRows
If Cells(i, 4) = "In Criteria Count" Then
If Cells(i, 4).Offset(0, 1).Value > 0 Then
x = Cells(Cells(i, 4).Row, 2).End(xlUp).Row
Cells(x, 2) = "mySL" & Zaehler
Zaehler = Zaehler + 1
End If
End If
Next i

hary
02.04.2012, 13:49
Hallo
So, jetzt wieder da. So wie ich es jetzt verstehe moechtest Du die Variablen mySL1 mySL2 usw. zur Laufzeit erstellen. Wird glaub ich kompliziert und passe ich lieber.
Aber ein anderer Vorschlag: Du hast Millionen von Zellen, lese die Werte doch in Zellen am A.... der Tabelle ein. Von dort kannst Du immer auf die Werte zugreifen. Oder mt Namen arbeiten, Dann geht das auslesen mit Range("mySL1")
gruss hary

Lealo
03.04.2012, 13:14
Okay, naja dann überlege ich mir einen anderen Lösungsweg.

Trotzdem danke für deine Hilfe!

Liebe Grüsse
Lealo