VBA-Excel 2007 = Sub MarkierungDurchlaufen (innerhalb einer Spalte bis Bedingung erfüllt)

...komplette Frage anzeigen

2 Antworten

Das gibt keine Endlosschleife, sondern dauert nur sehr lang, wenn Du die gesamte Spalte auswählst (>1Mi Zellen/Spalte, VBA muss bei jedem Befehl wieder auf den Intrerpreter zugreifen, etwas umständlicher als das vermutlich viel "direkter" programmierte Excel).

Du kannst das abkürzen mit

For Each rngZelle in Selection.Specialcells(xlvalue)

dann werden nur die mit Werten gefüllten Zellen berücksichtigt
(Inkonsequente Bezeichnung: xlvalue aber xlconstantS, dagegen wieder xlVisible, aber xlformulas? <= da bin ich mir nicht sicher, denn das ist auch ein Argument bei Pastespecial)
Wenn Du aber summierst, steht das GESAMTSUMME: doch sicher in der Spalte links davon? (wobei ich auch das aufaddieren in Deinem Makro vermisse, aber Du siehst das ja sowieso nur als Beispiel)
Dann

if rngZelle.offset(0, -1).value = "GESAMTSUMME:" then exit for

(wobei Du Dir das .value im Prinzip sparen könntest, ist das Standard-Argument, aber der Klarheit wegen schreib ich es immer dazu)

Na, da hab ich mir mal wieder zu viel Zeit gelassen und nicht vorher aktualisiert, Du hast ja schon eine zufriedenstellende AW, wenn auch mit ganz anderem Lösungsansatz (den ich erst mal nachvollziehen muss).

0

Ich danke dir auch. Für deine Antwort werde ich mein gelöstes Problem mal mit einem Beispiel versehen: Folgende Liste wird importiert:

Spalte A. Spalte B. Spalte C Abteilung Kostenstelle. Stunden 111 222. 1 333. 2 444. 1 555. 222. 3 333. 4 Gesamtsumme 11

Ich hoffe es wird jetzt verständlicher. Also nochmals danke für die schnellen Antworten.

0
@Tappas83

danke für die Ergänzung, aber ich kann mir daraus leider kein Bild von der Zuordnung der Zahlen zu den Spalten/Zeilen machen, vllt so?:

Spalte A. Spalte B. Spalte C
Abteilung Kostenstelle. Stunden
111 222.| 1 333.| 2 444.
1 555.| 222.| 3 333.
4 | Gesamtsumme | 11

oder
111 222. 1
. . . .333. 2
. . . .444. 1
. . . .555. . . . .
. . . . 222. 3
. . . .333. . . . .
Nur komme ich dann nirgends auf Gesamtsumme 11

Aber Hauptsache, Du hast eine Lösung, und vllt kannst du auch aus meinen Befehlen was für Dich Sinnvolles entnehmen!

0

Ich sehe den Sinn des Ganzen zwar nicht wirklich, aber

(z.B. wenn der Name "Gesamtsumme" auftaucht, dann soll die Berechnung abgeschlossen werden)

Das erreichst Du mit:
If rngZelle.Value = "Gesamtsumme" Then Exit For

Das Ganze sieht dann so aus:

Sub MarkierungDurchlaufen()

Dim rngZelle As Range
Dim varAlterWert As Variant

For Each rngZelle In Selection
    If rngZelle.Value = "" Then
        rngZelle.Value = varAlterWert
    Else:
        If rngZelle.Value = "Gesamtsumme" Then Exit For
        varAlterWert = rngZelle.Value
    End If
    

Next rngZelle
MsgBox "Erstellt"
Debug.Print varAlterWert

End Sub

Vielen Dank für die schnelle Antwort,

es klappt super. Der Hintergrund liegt darin, dass ich monatlich eine Datei exportieren muss und diese anschließend bearbeite. Die Anzahl der Daten ist unterschiedlich groß und endet immer mit der Gesamtsumme. Mit deiner Hilfe muss ich nicht mehr endlos nach unten scrollen (markieren) und kann nun sofort die Spalte komplett markieren und das Makro durchlaufen lassen.

Nochmals vielen Dank.

1

Was möchtest Du wissen?