Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Lösung-Werte zusammenfassen

VBA Lösung-Werte zusammenfassen
17.07.2016 16:03:17
Bea
Hallo,
ich benötige mal wieder Hilfe :-( und sag im Voraus wie immer wieder DANKE.
Ich habe 5 sheets in denen Werte ermittelt werden aus einer Liste.
Die so ermittelten Werte möchte ich gerne per VBA in einem sheet "Übersicht" addieren und zusammengefasst darstellen.
Beispiel: Tabellenblatt 1
A - B - C - D
12 68 12 12
Tabellenblatt 2:
A - B - C - D
80 16 5 31
Tabellenblatt Übersicht:
A - B - C - D
92 84 17 33
Hoffe das verständlich erklärt zu haben.
Und nun warte ich da ich eh nicht mehr richtig fündig werde im world wide web.
Grüße
Bea

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Lösung-Werte zusammenfassen
17.07.2016 16:49:19
Bea
Hallo liebe Gemeinde,
ich weiß das meine Anfrage simpel ist, aber ich finde einfach den Einstieg nicht.
Hab wirklich schon hunderte von Threads gelesen, die unter "zusammenfassen" zu finden waren, aber nichts passendes gefunden.
Darum meine Bitte mir zumindest den Einstieg zu ermöglichen.
Meist bastele ich den Rest dann irgendwie zusammen...mehr oder weniger :-)
Tabellenblätter 1 bis 5
Spalten A bis D
Zeilen 2 is 6
in einem neuen Blatt "Übersicht" addieren
in den gleichen Spalten und Zeilen wie in den Tabellenblättern 1 bis 5
Danke und Grüße
zusammenfassen mit Pivot oder
17.07.2016 17:08:02
MB12
Hallo Bea,
du schreibst nicht, wie!! du zusammenfassen möchtest
Beispieldatei mit gewünschtem Ergebnis wäre sinnvoll.
Gruß,
Margarete
Anzeige
AW: zusammenfassen mit Pivot oder
17.07.2016 17:13:28
Bea
Hi Margarete,
in einem Blatt "Übersicht" in dem die gleichen Zeilen- und Spaltenanzahl ist, somit fast (minimale Abweichungen) identisch zu den Blättern welche die Werte enthalten.
Mit ner Pivot habe ich es bisher gemacht, doch nun ist es zu unübersichtlich da es zu viele Werte gibt, die addiert und gelistet werden müssen.
Gruß
Bea
ohne VBA
17.07.2016 17:15:34
Michael
Hi Bea,
dafür addierst Du mit einer schlichten Formel, die Du mit der Maus zusammenklickst:
- Gehe in die Übersicht und dort in A2
- gib ein = ein
- wechsle auf Tabelle1
- klicke die betreffende Zelle an
- gib ein + ein
und wiederhole das für alle Tabellenblätter - beim letzten gibst Du dann kein + ein, sondern drückst Enter.
Für die ersten beiden Blätter sieht das dann z.B. so aus: =Tabelle1!A2+Tabelle2!A2
Die Formel kopierst Du schließlich einfach auf den gewünschten Bereich (z.B. A2:D6)
Im Menüband unter "Daten" gibt es im Bereich "Datentools" auch den Dialog "Konsolidieren", das kannst Du ja mal recherchieren.
Schöne Grüße,
Michael
Anzeige
AW: ohne VBA
17.07.2016 17:21:57
Bea
Hallo Michael,
wenn das mal so einfach wäre.
Es sind derzeit 36 Mappen, mit einer unterschiedlichen Anzahl von Tabellenblätter, für jede Mappe brauche ich eine Übersicht.
Mal sind es nur 4 Tabellenblätter, dann wäre die Formellösung auch problemlos machbar. Nur bei großen Abteilungen habe ich u.U. 50 Tabellenblätter pro Mappe.
Und da ich die alle alleine anpassen müsste finde ich das echt schwierig. Die Spalten liegen auch nicht nebeneinander und die Zeilen, welche die zu addierenden Werte enthalten liegen auch nicht unbedingt untereinander. Daher kommt eigentlich nur ne VBA lösung in Frage.
Aber danke dir sehr und Grüße
Bea
Anzeige
tja, wenn das so ist,
17.07.2016 17:36:04
Michael
Bea,
warum sagst Du dann eingangs, es geht um A2:D6 mit 5 Blättern?
Die Anzahl der Tabellenblätter ist nicht das Thema, das geht mit Schleife, ob es 5 oder 50 sind.
Nur: woher soll Excel wissen, welche Spalten bzw. Zeilen "interessant" sind?
Da gibt es mehrere Möglichkeiten: nach Überschriften in Spalten/Zeilen suchen, vorab pro Datei eine "Struktur" festlegen, die dann ausgelesen wird usw.
Wie stellst Du Dir das vor?
Nochmal zur Klärung: die "Übersicht" soll in jeder Datei getrennt erstellt werden? So daß das Makro jede Datei öffnet, die Übersicht anlegt und durchrechnet und die Datei dann speichert?
Ich fürchte, ohne anonymisierte Beispieldatein ist die Fragestellung zu schwammig.
Hm. Eine mit überschaubarem Aufwand zu programmierende Geschichte wäre, wenn Du die Übersicht jeweils händisch anlegst und die Zellen, die summiert werden sollen, irgendwie "markierst", indem Du z.B. "#hier" reinschreibst oder -123.
Schöne Grüße,
Michael
Anzeige
AW: tja, wenn das so ist,
17.07.2016 17:50:56
Bea
Hallo Michael,
ich versuche gerade eine Datei so zu reduzieren das ich sie hochladen kann.
Es sind blöderweise soviele Formeln darin, das ich immer wenn ich was lösche beim speichern neu berechnet wird.
Und das dauert arg lang.
Aber ich versuchs :-)
Aber danke die erstmal.
Gruß
Bea
Optionen/Formeln/Berechnung manuell owT
17.07.2016 17:56:20
Michael
AW: VBA Lösung-Werte zusammenfassen
17.07.2016 17:47:04
Christian
Hi, vermutlich macht das folgende Skript das was du möchtets. Ob eine VBA-Lösung hier
sinnvoll ist steht auf einem anderen Blatt :-)
Option Explicit
Option Base 1
Sub Addieren()
Dim i As Integer
Dim wb As Workbook
Dim intMaxSheet
Dim myArr As Variant
Dim r, c As Integer
ReDim myArr(1 To 6, 1 To 4)
Set wb = ThisWorkbook
intMaxSheet = 5
For i = 1 To intMaxSheet
For r = LBound(myArr) To UBound(myArr)
For c = LBound(myArr, 2) To UBound(myArr, 2)
myArr(r, c) = myArr(r, c) + wb.Worksheets("Tabelle" & i).Cells(r, c).Offset(1,  _
0).Value
Next c
Next r
Next i
wb.Worksheets("Übersicht").Range("A2:D6").Value = myArr
End Sub
Beste Grüße,
Christian
Anzeige
AW: VBA Lösung-Werte zusammenfassen
17.07.2016 18:51:45
Bea
https://www.herber.de/bbs/user/107071.xlsx
Hallo und vielen Dank für die Mühe bis dahin.
Habe nun mal eine Beispieldatei gebastelt die in etwa eine Mappe darstellt. Wie gesagt, wäre es nur eine, würde ich immer die Formellösung bevorzugen. Da es aber 36 sind, die jeweils unterschiedlich viele Tabellenblätter beinhalten können ist das schwer umsetzar. Ich kann auch leider die zu berechnenden (addierenden) Werte nicht aneinanderreihen. Es ist eine Vorlage die nicht verändert werden kann.
Ein weiteres Problem ist die Größe einer Mappe. Es sind pro Tabellenblatt ca. 1200 Formeln (Summenprodukt). Und das Berechnen dauert echt lang. Weitere Formeln lasse ich in einem Makro berechnen.
Daher wäre ich froh um eine Lösung per VBA.
@Christian - dein Code habe ich angepasst, doch er bleibt beim Offset hängen.
Ich habe alle Varianten bereist probiert, doch jedes mal stoppt es dort. Woran kann das liegen?
Grüße
Bea
Anzeige
Vorschlag
17.07.2016 19:49:57
Michael
Hi Bea,
da die Bereiche nicht an der gleichen Position sind, habe ich's mir einfach gemacht: Du gibst einfach eine Liste der Bereiche ein, und zwar jeweils, wo sie in der Übersicht sind und wo in den Blättern.
Ohne Sicherheitsabfrage, ob die Bereiche gleich groß sind, dann so:
Option Explicit
Sub zamzaehlen()
Dim blatt As String
Dim sh As Worksheet
Dim maxZ As Long, i As Long, s As Long, z As Long
Dim b ' wie Bereiche
Dim w0, wb ' wie Werte; 0 = Übersicht, b wie Blatt
blatt = Range("M3")
maxZ = Range("M" & Rows.Count).End(xlUp).Row
If maxZ 
Die Sicherheitsabfrage sind ja nur ein, zwei Zeilen, aber ich muß aus dem Haus.
Die Datei mit den nötigen Angaben zum Angucken und einer Plausibilitätsprüfung:
https://www.herber.de/bbs/user/107072.xlsm
Schöne Grüße,
Michael
P.S.: Vergiß nicht, die Berechnung wieder einzuschalten oder nimm F9...
Anzeige
AW: Vorschlag
17.07.2016 21:15:47
Bea
Hallo Ihr,
Danke !!!
Das habe ich gesucht.
Beide Lösungen sind perfekt!!!
Bin restlos begeistert - denn ich werde das nie kapieren :-(
Ihr seid echt super!
Grüße und schönen Restsonntag
Bea
AW: Vorschlag
17.07.2016 21:47:48
Bea
Hallo Michael,
ich traue mich ja fast gar zu fragen, aber ich glaube (nein, ich weiß es) ich komme wieder nicht weiter.
Option Explicit
Sub zamzaehlen()
Dim blatt As String
Dim sh As Worksheet
Dim maxZ As Long, i As Long, s As Long, z As Long
Dim b ' wie Bereiche
Dim w0, wb ' wie Werte; 0 = Übersicht, b wie Blatt
blatt = Range("M3")
maxZ = Range("M" & Rows.Count).End(xlUp).Row
If maxZ 
Fehlermeldung: Die Methode Range für das Objekt _Global ist fehlgeschlagen
Das passiert aber nur wenn ich es anpasse. Lasse ich es wie bei dir, funktioniert es.
...puh, so'n mist.
Kannst du mir nochmal helfen?
Danke und Grüße
Bea
Anzeige
Was für Werte?
18.07.2016 14:39:08
Michael
Hi Bea,
im Nachhinein ist mir noch ein Schwachpunkt eingefallen, den ich nicht berücksichtigt hatte: die Zuweisung erfolgt momentan NUR zu einem Array (das ist NICHT die Zeile, in der es hakelt), wenn der Bereich MEHR als eine Zelle umfaßt; wenn es sich um eine einzelne Zelle handelt (also z.B. C3), ist das Ergebnis kein Array, sondern ein einzelner Wert: dann kommt spätestens bei ubound(wb(i)) ein Fehler.
Warum bei Dir bereits vorher ein Fehler kommt, könnte daran liegen, daß Du mehrere Bereiche in einer Zelle zusammenfaßt. Arrays können nur aus EINEM zusammenhängenden Bereich erzeugt werden.
D.h. "D2:E4" ist unproblematisch, aber eine "normale" Range-Zuweisung wie z.B.
Range("A2:D4,E6:F8") mit mehreren Bereich geht bei Arrays NICHT.
Das müßtest Du dann in zwei Zeilen schreiben: A2:D4 und E6:F8 - Zeilen hast Du ja beliebig viele zur Verfügung.
Also, ich habe jetzt den Fall einer EINZELNEN Zelle berücksichtigt und getestet. Das mit dem nicht zusammenhängenden Bereich wäre mehr Aufwand als die Sache wert ist.
Makro:
Option Explicit
Sub zamzaehlen()
Dim blatt As String
Dim sh As Worksheet
Dim maxZ As Long, i As Long, s As Long, z As Long
Dim b ' wie Bereiche
Dim w0, wb ' wie Werte; 0 = Übersicht, b wie Blatt
blatt = Range("M3")
maxZ = Range("M" & Rows.Count).End(xlUp).Row
If maxZ  0 Or _
InStr(b(i, 2), ",") > 0 Then
MsgBox "Komma vorhanden: geht leider nicht mit mehreren Bereichen in Einem."
Exit Sub
End If
If (Range(b(i, 1)).Rows.Count  Range(b(i, 2)).Rows.Count) Or _
(Range(b(i, 1)).Columns.Count  Range(b(i, 2)).Columns.Count) Then
MsgBox "Zeilen und/oder Spalten unterschiedlich"
Exit Sub
End If
Next
' ************* BEVOR was geleert wird
ReDim w0(0 To UBound(b))
ReDim wb(0 To UBound(b))
For i = 1 To UBound(b)
Range(b(i, 1)).ClearContents
w0(i) = Range(b(i, 1))
Next
For Each sh In Worksheets
If Mid(sh.Name, 1, Len(blatt)) = blatt Then
For i = 1 To UBound(b)
wb(i) = sh.Range(b(i, 2))
If sh.Range(b(i, 1)).Count = 1 Then
w0(i) = w0(i) + wb(i)       ' einzelne Zelle
Else
For z = 1 To UBound(wb(i))  ' Schleife für mehrere = Array
For s = 1 To UBound(wb(i), 2)
w0(i)(z, s) = w0(i)(z, s) + wb(i)(z, s)
Next
Next
End If
Next
End If
Next
For i = 1 To UBound(b)
Range(b(i, 1)) = w0(i)
Next
End Sub

Datei: https://www.herber.de/bbs/user/107085.xlsm
Sollte bei Dir noch ein Fehler auftreten, kopiere bitte die Liste der Bereiche mal hier rein.
Schöne Grüße,
Michael
Anzeige
AW: Was für Werte?
18.07.2016 17:26:16
Bea
Hallo Michael,
darauf bin ich nun auch gekommen.
Macht aber nichts, habe die Spalten einzeln ausgewählt und es klappt hervorragend.
So können es auch andere Kollegen nachvollziehen.
Ih danke dir nochmals, denn das ist mir auch noch bei einer anderen Gelegenheit sehr hilfreich.
Schönen Abend noch.
Grüße
Bea
sehr schön, das freut mich,
18.07.2016 17:39:32
Michael
Bea,
schöne Grüße zurück & happy exceling,
Michael
AW: VBA Lösung-Werte zusammenfassen
17.07.2016 20:30:53
Christian
Hallo Bea,
Michael hat dir ja schon eine wirklich ausgefuchste Lösung geliefert!
Hier nur der Vollständigkeit halber meine Bastelvariante, angepasst auf deine Musterdatei.
LG; Christian
Option Explicit
Option Base 1
Sub Addieren()
Dim i As Integer
Dim wb As Workbook
Dim ws As Worksheet
Dim intMaxSheet
Dim myArr As Variant
Dim r, c As Integer
'' Bereich C2:F8
ReDim myArr(2 To 8, 3 To 6)
Set wb = ThisWorkbook
intMaxSheet = 5
For Each ws In wb.Worksheets
If Not ws.Name = "Übersicht" Then
For r = LBound(myArr) To UBound(myArr)
For c = LBound(myArr, 2) To UBound(myArr, 2)
myArr(r, c) = myArr(r, c) + ws.Cells(r, c).Value '.Offset(1, 0).Value
Next c
Next r
End If
Next
'Werte Schreiben in Blatt 'Übersicht'
wb.Worksheets("Übersicht").Range("C6:F12").Value = myArr
''Bereich D19:F21
ReDim myArr(19 To 21, 4 To 6)
For Each ws In wb.Worksheets
If Not ws.Name = "Übersicht" Then
For r = LBound(myArr) To UBound(myArr)
For c = LBound(myArr, 2) To UBound(myArr, 2)
myArr(r, c) = myArr(r, c) + ws.Cells(r, c).Value '.Offset(1, 0).Value
Next c
Next r
End If
Next
'Werte Schreiben in Blatt 'Übersicht'
wb.Worksheets("Übersicht").Range("D23:F25").Value = myArr
End Sub

AW: VBA Lösung-Werte zusammenfassen
17.07.2016 21:17:56
Bea
Hallo,
Danke!
Das ist perfekt.
Kann sogar ich "umbasteln".
Ich werde das nie lernen...:-(
Vielen Dank nochmal und schönen Restsonntag
Gruße
Bea

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige