42 Aufrufe
Gefragt in Tabellenkalkulation von mawi2020 Einsteiger_in (3 Punkte)
Hallo liebe Mitstreiter,

Ich bin schon seit langem ein stiller Mitleser und konnte mir durch das Forum hier bereits schon einiges aneignen, worauf ich von alleine wohl nicht gekommen wäre. Dafür schon mal ein großes Dankeschön vorweg.

Nun sitze ich gerade an der Auswertung einer Datentabelle und stecke irgendwie fest...

Die Daten sind im Sheet "Aufmaß".

Die Auswerung findet im Sheet "Aufmaß2" statt.

Hierbei soll der Bereich "Aufmaß2" Bereich(G14:Zeilenende) mit dem Bereich "Aufmaß" Bereich(G14:Spaltenende) verglichen werden. Im "Aufmaß" kommen die Zelleninhalte mehrfach (1,1,1,1,2,2,3,3,3,3,4,4,5,5,5,...) vor, im "Aufmaß2" kommen die Zelleninhalte nur einmal (1,2,3,4,5,...) vor (Duplikate sind bereits entfernt).

Im "Aufmaß" Bereich(O15:(Zeilenende,Spaltenende)) z.B. für den Wert "1" (O15:PP18) befinden sich die Werte, die dann Spaltenweise in der entsprechenden Zeile im "Aufmaß2" summiert werden sollen z.B. für den Wert "1" Summe(O15:O18) in (O15:PP15).

Für den Wert "2" wäre das dann im "Aufmaß" (O19:PP20), diese müsstesn dann im "Aufmaß2" in die Zellen (O16:PP16).

Tabelle geht analog so weiter.

Der VBA Code soll auch auf andere, analog aufgebaute Tabellen angewendet werden können.

Die einzigen "fixen Bezüge" sind "Aufmaß" G15 nach unten als Variable bis Spaltenende, "Aufmaß" O10 nach rechts als Variable bis Zeilenende, "Aufmaß" und "Aufmaß2" die Zelle "O15" als Start für das Datensummieren und Summen einfügen.

Als SUMMEWENN habe ich das schon problemlos zum laufen bekommen. Der WENN Befehl macht nur, das ich keine "0" in jeder leeren Zelle zu sehen bekomme.

=WENN(SUMMEWENN(Aufmaß!$G$15:$G$10000;'Aufmaß2'!$G15;Aufmaß!O$15:O$100)>0;SUMMEWENN(Aufmaß!$G$15:$G$10000;'Aufmaß2'!$G15;Aufmaß!O$15:O$100);"")

Jetzt soll alles in VBA um die Nutzer davon abzuhalten, die Formel zu verändern oder "verschwinden zu lassen.

Ich freue mich schon auf eure Ansätze oder gar Lösung.

Grüße,

der MAWI

2 Antworten

0 Punkte
Beantwortet von

Hallo MAWI

Nutze Application.WorksheetFunction

https://docs.microsoft.com/de-de/office/vba/api/excel.application.worksheetfunction

Gruß Michael

0 Punkte
Beantwortet von m-o Profi (18.1k Punkte)

Hallo MAWI,

hier mal ein Beispiel, wie man das mit VBA lösen kann:

Sub Summieren()

Dim arrAufmass As Variant
Dim lngZeile As Long
Dim lngLetzte As Long
Dim dblSumme As Double
Dim z As Long

'letzte Zeile in Spalte G im Arbeitsblatt Aufmaß ermitteln
With ThisWorkbook.Worksheets("Aufmaß")
  lngLetzte = .Cells(Rows.Count, 7).End(xlUp).Row
  'Array für Aufmass redimensioneren, ab Zeile 15 werden die Spalte G bis O werden eingelesen
  ReDim arrAufmass(lngLetzte - 14, 9)
  'Daten in Array einlesen
  arrAufmass = .Range("G15:O" & lngLetzte)
End With

'im Blatt Aufmaß2 Summieren
With ThisWorkbook.Worksheets("Aufmaß2")
  'dazu erst einmal die letzte Zeile in Spalte G ermitteln
  lngLetzte = .Cells(Rows.Count, 7).End(xlUp).Row
  'nun ab Zeile 15 die Spalten durchlaufen
  For lngZeile = 15 To lngLetzte
    'Variable für Summe auf Null setzen
    dblSumme = 0
    'nun Array Aufmaß durchlaufen
    For z = 1 To UBound(arrAufmass, 1)
      'prüfen, ob wert in Spalte G gleich ist und falls ja, dann Summieren
      If .Cells(lngZeile, 7) = arrAufmass(z, 1) Then dblSumme = dblSumme + arrAufmass(z, 9)
    Next z
    'Summe in Zieltabelle in Spalte O schreiben
    .Cells(lngZeile, 15) = dblSumme
  Next lngZeile
End With

End Sub

Kopiere das Makro in ein allgemeines Modul deiner Arbeitsmappe.

Aber man könnte die Zellen mit den Formeln auch einfach über den Blattschutz (auch mit entsprechenden Passwort) schützen.

Gruß

M.O.

...