Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel VBA Summe von Bereich
#1
Hallo zusammen,

ich möchte mir über VBA die Summe eines variablen Bereiches auswerten Lassen. Und zwar habe ich mir ein Marco geschrieben, welches bestimmte Ereignisse nummerriert.

Jetzt möchte ich über VBA die Summe bilden von jeder 0 bis zur nächsten 0.

Bsp:

0    2
1    3
2    5    x
0    1
1    3    x
0    2

Da sollte als erstes eine 10 Rauskommen, dann eine 4 usw.

Die Zahl kann dann ruhig immer an der Letzten Zeile vor der nächsten 0 stehen. (wie das x)

VBA deswegen: Hab die andere Lösung schon (mithilfe dieses Forums) aber da es zum teil sehr viele Daten sind ist VBA einfach die bessere Lösung denke ich.

Vielen Dank!:)
Antworten Top
#2
Hallo,

Zitat:Und zwar habe ich mir ein Marco geschrieben, welches bestimmte Ereignisse nummerriert.

warum zeigst du uns das nicht? Da kann man sicher drauf aufbauen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Code:
Sub RollenwechselProAuftragZählen()
  Dim rngTreffer As Range
  Dim lngC As Long
  Dim strAdresse As String
  Dim alteAdresse As String
 
  With Worksheets("Tabelle2")
     .Columns(66).ClearContents
     
     Set rngTreffer = .Columns(21).Find("RollenWechsel", LookIn:=xlValues, lookat:=xlWhole)
     
     If Not rngTreffer Is Nothing Then
       
        strAdresse = rngTreffer.Address
        alteAdresse = rngTreffer.Address

        Do

           If rngTreffer.Offset(0, -11) <> Range(alteAdresse).Offset(0, -11) Then
              lngC = 0
           End If
           
           alteAdresse = rngTreffer.Address
           
               lngC = lngC + 1
              .Cells(rngTreffer.Row, 66) = lngC
           Set rngTreffer = .Columns(21).FindNext(rngTreffer)
        Loop While rngTreffer.Address <> strAdresse
     End If
     
  End With
 
  Call Jobwechsel
 
End Sub


Sub Jobwechsel()
  Dim rngTreffer As Range
  Dim lngC As String
  Dim strAdresse As String
  Dim alteAdresse As String
 
  With Worksheets("Tabelle2")

     Set rngTreffer = .Columns(49).Find("*", LookIn:=xlValues, lookat:=xlWhole)
     
     If Not rngTreffer Is Nothing Then
       
        strAdresse = rngTreffer.Address
        alteAdresse = rngTreffer.Address

        Do

           If rngTreffer.Offset(0, 0) <> Range(alteAdresse).Offset(0, 0) Then
              lngC = 0
             .Cells(rngTreffer.Row, 66) = lngC
           End If
           
           alteAdresse = rngTreffer.Address
           
           lngC = lngC

           Set rngTreffer = .Columns(49).FindNext(rngTreffer)
        Loop While rngTreffer.Address <> strAdresse
     End If
     
  End With
 
End Sub

PS: Bin kein Profi also ist bestimmt nicht gerade schön gelöst, habt nachsicht. :)
Antworten Top
#4
Hallo,

mit VBA ginge es mit columns(3).specialcells(4).areas

Da die Formelspezialisten aber hier eine Lösung anbieten bevor ich auch nur den ersten Test machen kann, werde ich keine lauffähigen Code posten.

mfg
Antworten Top
#5
Hi,

warum müssen es immer Makros sein? Das geht doch mit Formeln viel einfacher. Leider stellst Du hier nur Brocken vor, damit kann man sich kein Bild machen von dem, was Du fabrizierst.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#6
(13.02.2018, 10:14)BoskoBiati schrieb: Hi,

warum müssen es immer Makros sein? Das geht doch mit Formeln viel einfacher. Leider stellst Du hier nur Brocken vor, damit kann man sich kein Bild machen von dem, was Du fabrizierst.

Hallo BoskoBiati

also mit Formeln hab ich das soweit hinbekommen (mit Hilfe)

Code:
=WENNFEHLER(SUMME(INDEX(BF:BF;KKLEINSTE(WENN($U$1:$U$10001="Rollenwechsel";ZEILE($U$1:$U$10001);"N");ZEILE(U85))):INDEX(BF:BF;KKLEINSTE(WENN($U$1:$U$10001="Rollenwechsel";ZEILE($U$1:$U$10001);"N");ZEILE(U86))-1));"")

Das klappt dann auch, allderings wenn ich was ändere berechnet er ständig die Tabelle neu was zu Problemen führt. ::(

Darum dachte ich mach ich das mit VBA das ich das nur bei bedarf durch laufen lasse.

Aber vlt ist das ja auch sinnlos. :(
Antworten Top
#7
Hi,


Zitat:allderings wenn ich was ändere berechnet er ständig die Tabelle neu was zu Problemen führt.

aber nicht wegen dieser Formel! Deswegen sage ich ja, Du doktorst da rum, ohne zu wissen, was passiert. Wir wissen es auch nicht, da Du immer nur Brocken vorstellst
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#8
Brick 
Ok habe jetzt mal meinen Aktuellen Stand als Beispieldatei erstellt.

Hier die Datei:

Achtung: Die findet irgendwie noch kein Ende und sucht im Kreis.. Also ist der Ansatz so schonmal ok? Denke so in etwa könnte das klappen. :)


Angehängte Dateien
.xlsm   Test_Suchen.xlsm (Größe: 14,41 KB / Downloads: 5)
Antworten Top
#9
Hallo,

das scheint mir alles etwas unausgegoren zu sein. Die Begriffe EEnd und Start setzt du von Hand?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#10
(13.02.2018, 12:05)Klaus-Dieter schrieb: Hallo,

das scheint mir alles etwas unausgegoren zu sein. Die Begriffe EEnd und Start setzt du von Hand?


Ja so ganz Optimal ist das bestimmt nicht, das denke ich mir auch ist viel Stückwerk.

Die erstelle ich über ein Makro.

Code:
Sub Jobwechsel()
  Dim rngTreffer As Range
  Dim lngC As String
  Dim strAdresse As String
  Dim alteAdresse As String
 
  With Worksheets("Tabelle2")

     Set rngTreffer = .Columns(49).Find("*", LookIn:=xlValues, lookat:=xlWhole)
     
     If Not rngTreffer Is Nothing Then
       
        strAdresse = rngTreffer.Address
        alteAdresse = rngTreffer.Address

        Do

           If rngTreffer.Offset(0, 0) <> Range(alteAdresse).Offset(0, 0) Then
              lngC = 0
             .Cells(rngTreffer.Row, 66) = lngC
             .Cells(rngTreffer.Row, 68) = "Start"
             
               If rngTreffer.Row > 2 Then
                   .Cells(rngTreffer.Row - 1, 68) = "EEnd"
               End If
               
           End If
           
           alteAdresse = rngTreffer.Address
           
           lngC = lngC

           Set rngTreffer = .Columns(49).FindNext(rngTreffer)
        Loop While rngTreffer.Address <> strAdresse
     End If
     
  End With
 
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste