Frage von MPCKhome, 25

VBA Auswahl und rechnen mit abschnitten?

Guten Tag VBA-Profis Ich habe ein Problem ich habe ca 5000 zeilen material und muss dort etwas zusammen rechnen.

In jedem Abschnitt "AG(X)" müssen die spalten K und L mit einer Formel verrechnet werden. Da die Formel komplex ist lasse ich sie einfach weg.

Ich würde gerne wissen wie ich:

  1. Die Zeile in der Spalte M und N anspreche in der auch immer AG(x) steht, um dann

  2. Alle Zeilen der Spalten K und L in dem Abschnitt bis zum nächsten AG, für diese Formel ansprechen kann.

Ich hoffe ich hab es gut erklärt (:

Expertenantwort
von Ninombre, Community-Experte für Excel, 25
Sub summeag()
Dim summe As Long
summe = 0
For i = 1 To 5000 'anzahl der Einträge insgesamt
If Cells(i, 1).Value <> "" Then
For j = i To 100 'maximalwert bis der nächste AG kommt
summe = summe + Cells(j, 2).Value 'da kannst Du auch die komplizierte Formel ansetzen
If Cells(j + 1, 1).Value <> "" Then
Cells(i, 3).Value = summe
summe = 0
Exit For
End If
Next j
End If
Next i
End Sub

Zellen ansprechen geht mit cells(Zeile, Spalte).value -> andersrum als in den normalen Zellverweisen! oder als Range("A1").value , bei dieser Schreibweise finde ich es aber unübersichtlicher Variablen zu verwenden.

Da ich nicht weiß, wie die Tabelle komplett aussieht, hab ich zwei for-schleifen genommen. Naheliegend ist ja solange zu summieren (oder was Du genau rechnen willst) bis der nächste AG kommt. Wenn nach dem letzten AG allerdings kein eindeutiges Kennzeichen für das Ende der Tabelle kommt, läuft man in eine Endlosschleife.

In meinem Beispiel steht der AG in Spalte A, summiert wird B und das Ergebnis bei C eingetragen. Musst Du entsprechend anpassen.

Kommentar von Ninombre ,

tja, da rede ich über Endlosschleifen und merke gerade, dass ich eine andere Lücke habe: Wenn das Ergebnis geschrieben wird, wenn in der darauffolgenden Zeile ein neuer AG auftaucht, dann bleibt die Berechnung beim letzten AG leer (kommt ja kein neuer...), da müsstest Du im einfachsten Fall einen Dummy-Eintrag hinschreiben. Alternativ kann man auf eine Spalte abfragen, die immer gefüllt ist. Müsstest Du aber einschätzen, ob es das in deinem Beispiel gibt.

Kommentar von MPCKhome ,

Vielen Dank, dein Code hat mir den Passenden Ansatz gegeben. Habe es gelöst. Code ist für mein Problem dieser:

Kommentar von MPCKhome ,
Sub Berechnen_ges()


For i = 3 To 1000
If Range("A" & i) <> "" Then
Range("R3") = Range("K" & i)
Range("S3") = Range("L" & i)
Else: GoTo zeile2
End If

For j = i + 1 To i + 99
If Range("A" & j) = "" Then
Range("R" & j) = Range("K" & j)
Range("S" & j) = Range("L" & j)
Else: GoTo Zeile1
End If
Next j

Zeile1:
Range("M" & i) = "formel Tag"
Range("N" & i) = "formel Nacht"
Range("R3:S53") = Empty

zeile2: Next i

End Sub
Expertenantwort
von DeeDee07, Community-Experte für Excel, 18

Ich würde die AG(x) Spalte komplettieren, so dass die Datensätze vollständig sind. Wie das geht, dazu siehe Oubyi's Antwort hier https://www.gutefrage.net/frage/excel2013-letzen-passenden-wert-in-liste-in-matr...

Anschließend kannst du es mit Formeln berechnen (SUMMEWENN u.ä.)

Kommentar von Ninombre ,

DH für den Link auf diese Idee (bei der Gelegenheit natürlich doppeltes DH für Oubyi)

Wenn mir jemand VBA sagt, dann denke ich VBA. @Fragesteller: Die Variante verspricht unterm Strich die bessere Lösung als sich mit Makros abzumühen.

Antwort
von maximilianus7, 21

wo ist jetzt genau dein problem? ein bisschen VBA kannst du wohl, um eine formel zu formulieren. eine schleife über zellen formulieren? oder was?

Antwort
von Spirit528, 23

http://praxistipps.chip.de/vba-wert-aus-zelle-auslesen-so-gehts_37989

Keine passende Antwort gefunden?

Fragen Sie die Community