Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1404to1408
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

Arrayformel Summe über Tabellenblätter

Arrayformel Summe über Tabellenblätter
22.01.2015 15:30:51
Blockus
Guten Tag an alle
ich habe folgendes Problem:
Ich habe eine Exceltabelle mit mehreren Tabellenblättern und vor Jahren mal eine Lösung geschrieben, die mir aus allen Sheets (bis auf die letzten 3) bestimmte Werte in einem array aufaddiert und die Summe in das Blatt Gesamtprovision schreibt. Das funktioniert auch gut. Nun will ich diese Berechnung aber nur für die Sheets veranlassen, die fzg1, fzg2, fzg3 usw (bis fzg15 oder so...) machen.
Klappt irgendwie nicht, bin am verzweifeln. Kann jemand helfen?
Hier der code:
Public Sub S_array()
GP = 0
BEF = 0
VNZ = 0
VNZP = 0
SP = 0
Dim a1(15, 100)
Call passwortraus
For I% = 1 To Sheets.Count - 3
Sheets(I%).Select
a1(1, I%) = Range("f41")
a1(2, I%) = Range("d49")
a1(3, I%) = Range("c4")
a1(4, I%) = Range("f49")
a1(5, I%) = Range("f51")
a1(6, I%) = Range("f54")
a1(7, I%) = Range("m19")
a1(8, I%) = Range("m21")
a1(9, I%) = Range("m23")
a1(10, I%) = Range("m25")
a1(11, I%) = Range("m27")
a1(12, I%) = Range("m29")
a1(13, I%) = Range("m37")
a1(14, I%) = Range("m45")
a1(15, I%) = Range("m48")
GP = GP + a1(6, I%)
BEF = BEF + a1(1, I%)
VNZ = VNZ + a1(2, I%)
VNZP = VNZP + a1(4, I%)
SP = SP + a1(5, I%)
Next I%
Sheets("Gesamtprovision").Select
'For i% = 1 To Sheets.Count - 3
'Range("a" & i% + 4) = a1(1, i%)
Range("b5") = BEF
Range("c5") = VNZ
Range("d5") = VNZP
Range("e5") = SP
'Range("f5") = GP
'Range("g" & i% + 4) = a1(7, i%)
'Range("h" & i% + 4) = a1(8, i%)
'Range("i" & i% + 4) = a1(9, i%)
'Range("j" & i% + 4) = a1(10, i%)
'Range("k" & i% + 4) = a1(11, i%)
'Range("l" & i% + 4) = a1(12, i%)
'Range("m" & i% + 4) = a1(13, i%)
'Range("n" & i% + 4) = a1(14, i%)
'Range("o" & i% + 4) = a1(15, i%)
'Next i%
'Cells(1, 1).Value = GP geht auch
Debug.Print "Gesamtprovision " & GP
Debug.Print "Bruttoertragsprovision Fahrzeug " & BEF
Debug.Print "Nettozubehör " & VNZ
Debug.Print "Prozente Zubehör " & VNZP
Debug.Print "Sonderprämie " & SP
Call passwortrein
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arrayformel Summe über Tabellenblätter
22.01.2015 15:59:20
Rudi
Hallo,
nur für die Sheets veranlassen, die fzg1, fzg2, fzg3 usw (bis fzg15 oder so...) machen
was heißt das?
Gruß
Rudi

AW: Arrayformel Summe über Tabellenblätter
23.01.2015 07:36:43
Blockus
Nun will ich diese Berechnung aber nur für die Sheets veranlassen, die fzg1, fzg2, fzg3 usw (bis fzg15 ...) heißen

AW: Arrayformel Summe über Tabellenblätter
22.01.2015 16:00:27
Jürgen
Hallo Blockus,
gibt es einen guten Grund, das mit VBA zu machen, und nicht per Formel, z. B. für BEF
=Summe(Tabelle1:Tabelle15!F41)
Gruß, Jürgen

AW: Arrayformel Summe über Tabellenblätter
23.01.2015 07:38:41
Blockus
Ja, da die Anzahl der Tabellenblätter mit dem Namen fzg1, fzg2 bis fzg(n) nicht konstant ist.
Können mal 2 aber auch bis zu 20 Blätter sein.

Anzeige
AW: Arrayformel Summe über Tabellenblätter
23.01.2015 14:59:28
Jürgen
Hallo Blockus,
ja und? In Abwandlung der hier beschriebenen Lösung http://www.excelformeln.de/formeln.html?welcher=234 für den Wert BEF:
=SUMME(SUMMEWENN(INDIREKT("fzg"&ZEILE(INDIREKT("a1:a"&$B$1))&"!f41");" Eingeben als Arrayformel (also mit STRG + SHIFT + ENTER abschließen => geschweifte Klammern). Zu ersetzen wäre lediglich noch "$B$1" gegen eine Zelle (oder ein definierter Name), in der / dem die Anzahl der Blätter zu entnehmen ist + ggfs. ein VBA-Code, um den Wert zu ändern.
Alternativ: als viertletztes Blatt ein leeres Blatt mit z. B. dem Namen "Ende" einfügen und dieses verbergen. Dann die Formel
=Summe(fzg1:Ende!F41)
verwenden.
Zu Deinem Code noch die Anmerkung, dass Du keinen Vorteil aus der Verwendung eines Arrrays ziehst. Statt der Zeile
BEF = BEF + a1(1, I%)
könntest Du unter Weglassung des Arrays direkt auf die Zelle zugreifen:
BEF = BEF + Sheets(I%).range("f41").value
Sollten die vorhergehenden Lösungen nicht möglich sein, weil die Blätter nicht lückenlos hintereinander stehen, lässt sich die Lösung von Franz noch etwas straffen:
Sub Summen()
Dim Blatt                As Worksheet
Dim BEF                  As Double
Dim VNZ                  As Double
Dim VNZP                 As Double
Dim SP                   As Double
Dim GP                   As Double
For Each Blatt In ActiveWorkbook.Worksheets
If LCase(Left(Blatt.Name, 3)) = "fzg" And IsNumeric(Mid(Blatt.Name, 4)) Then   'Prüfe erste  _
3 Zeichen im Blattnamen
If Val(Mid(Blatt.Name, 4)) 
Gruß, Jürgen

Anzeige
AW: Arrayformel Summe über Tabellenblätter
24.01.2015 09:17:04
Blockus
Danke, genau so sollte es funktionieren!!!!

AW: Arrayformel Summe über Tabellenblätter
22.01.2015 16:01:14
fcs
Hallo Blockus,
dann musst du den Blattnamen und ggf. auch die Zahl entsprechend prüfne.
  For I% = 1 To Sheets.Count - 3
Sheets(I%).Select
Select Case LCase(Left(Sheets(I%).Name, 3)) 'Prüfe erste 3 Zeichen im Blattnamen
Case "fzg"
If Val(Mid(Sheets(I%).Name, 4)) 

Gruß
Franz

AW: Arrayformel Summe über Tabellenblätter
23.01.2015 07:39:54
Blockus
Probiere ich aus, danke erst einmal melde mich noch mal ob es klappt

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige