Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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 verbessern

VBA verbessern
21.02.2013 08:21:33
Julia
Hi,
ich habe einen Code der mir die Gesamtübersicht über verschiedene Kalkulationen gibt. Wichtig ist hierbei, dass ich z.B. mit dem x für abgeschlossene Projekte(siehe Beispieldatei) auswählen kann, welche Tabellenblätter einbezogen werden. Meine Variante funktioniert, dauert aber je nach Menge der Kalkulationen dann doch eine Weile zum aktualisieren und sieht etwas umständlich aus. Ich brauche so was aber öfter, daher bitte nur Vorschläge die ich als VBA-Laie verstehen kann und wieder anwenden kann. Eine Verkürzung des Codes kam ja bereits in meinem alten Thread, als der Button nicht ging.
https://www.herber.de/forum/archiv/1300to1304/t1300287.htm#1300287
Die einzelnen Daten der Spalten O-CI brauche ich nur für die Übersicht CL-CS, die mein eigentliches Ziel ist. Die Kalkulationen sind immer gleich aufgebaut.
Zur Verkürzung nur für mich zum Verständnis:
Cells(x, 15).Resize(, 36).Value = _
WorksheetFunction.Transpose(.Cells(19, 5).Resize(36))
Cells(x, 51).Resize(, 36).Value = _
WorksheetFunction.Transpose(.Cells(19, 6).Resize(36))

Resize steht einfach für die Wiederholung 36Mal, wofür steht WorksheetFunction.Transpose?
Danke für eure Hilfe!
LG Julia
https://www.herber.de/bbs/user/84001.xlsm

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA verbessern
21.02.2013 09:22:53
Rudi
Hallo,
mein Code macht das gleiche wie deiner.
Zusätzlich noch Application.Screenupdating=False rein, dann geht das schneller
Sub Julia()
Dim x As Long, i As Integer
ActiveSheet.Move before:=Sheets(1) 'setzt Actives Blatt an erste Stelle
x = 2
Application.ScreenUpdating = False
For i = 3 To Sheets.Count
With Sheets(i)
Cells(x, 1) = .Name
Cells(x, 3).Value = .Cells(9, 5)
Cells(x, 4).Value = .Cells(14, 5)
Cells(x, 6).Value = .Cells(10, 5)
Cells(x, 7).Value = .Cells(11, 5)
Cells(x, 8).Value = .Cells(12, 5)
Cells(x, 9).Value = .Cells(13, 5)
Cells(x, 11).Value = .Cells(6, 4)
Cells(x, 13).Value = .Cells(3, 6)
Cells(x, 15).Resize(, 36).Value = _
WorksheetFunction.Transpose(.Cells(19, 5).Resize(36))
Cells(x, 51).Resize(, 36).Value = _
WorksheetFunction.Transpose(.Cells(19, 6).Resize(36))
Cells(x, 87).Value = .Cells(4, 10)
End With
x = x + 1
Next i
End Sub

Resize steht einfach für die Wiederholung 36 Mal
Das ist nicht richtig.
Resize erweitert den angegebenen Zellbereich.
Somit wird Cells(x,15) (entspricht Range("Ox") der Bereich Range("Ox:AXx"), bzw aus Cells(19,5) (=Range("E19")) wird Range(E19:E54").
WorksheetFunction.Transpose transponiert den Bereich, macht also aus Zeilen Spalten. Somit wird z.B. E19:E54 in O2:AX2 übertragen.
Gruß
Rudi

Anzeige
AW: Mal mit FML
21.02.2013 13:45:57
Julia
In der Beispieldatei steht bei mir nur
#Name? in A2 und sonst überall #Bezug! ?
Die Verkürzung des Codes werde ich nutzen. Da ich aber in einem anderen Fall schon wieder so was brauche, hoffe ich noch auf eine andere Lösung um in der Kalkulationsübersicht die Summe aller ausgewählten Tabellenblätter zu berechnen. Bisher habe ich z.B. eine Projektübersicht erstellt, indem ich in jeder relevanten Zelle immer Tabellenblatt 1 Zelle A1+ Tabellenblatt 2 Zelle A1 etc. geklickt habe, was nervig ist. Weil sobald ein Unterprojekt dazukommt, muss ich wieder in alle Zellen der Gesamtübersicht rein und das neue hinzufügen. Hoffe man versteht was ich meine?
Vielleicht klappt das ja mit der Lösung von JACKD, die aber grade nicht geht.
Danke für die Hilfe.
LG Julia

Anzeige
AW: Mal mit FML
21.02.2013 14:07:02
JACKD
Sind deine Makros aktiviert?

AW: Mal mit FML
21.02.2013 14:19:47
Julia
Nee ok, darauf hatte ich nicht geachtet, da du ohne Makros geschrieben hast :)
Ok das geht zumindest schnell zu kopieren für neue Tabellenblätter. Und ist für neue Dateien schneller angelegt als mein VBA-Code.
Aber wenn ich in meiner Beispieldatei einfach die Summe aller Werte z.B. in C33 aus den von mir gewünschten Tabellenblättern (ebenfalls jeweils C33)haben will, muss ich vorher alle Werte als Liste darstellen (über Code oder FML) und dann über z.B. markierung mit x wählen und summieren lassen. Ich kann nicht einfach über VBA bestimmte Blätter auswählen und von allen Zellen die ich brauche die Summe bilden lassen, oder geht das irgendwie?

Anzeige
Vielleicht doch mit VBA?
21.02.2013 15:27:02
Julia
Nee nicht ganz, ich brauche nicht die Summe aller Werte Z1-Z10. Ich will ohne dass ich die Liste Z1-Z10 von allen Tabellen erstellen muss, die Summe aller Z1, die Summe aller Z2,... Es geht mir darum, dass ich mittlerweile über 60 Werte bei 10-15 Projekten(einzelne Tabellenblätter) als Liste darstelle (die ich dann ausblende zur besseren Übersicht)und dann die Summen bilde um eine komplette Kalkulation zu erhalten. Hierbei muss ich aber die Möglichkeit haben auszuwählen was reinkommt so wie in deinem Beispiel. Ist schwer zu erklären, daher hier nochmal der Link zu der Datei - ich will eigentlich nur CO&CP ausgefüllt haben als Summe der Tabellenblätter a,c&d. Das geht aber wahrscheinlich nur mit VBA, oder?
https://www.herber.de/bbs/user/84001.xlsm

Anzeige
Z= Zeile oder Z= Spalte (Z) owT
21.02.2013 15:54:24
JACKD
.

AW: Z= Zeile oder Z= Spalte (Z) owT
21.02.2013 16:11:12
Julia
Das Z war jetzt aus deiner Datei, also Zeile. Ich habe in meiner Beispieldatei die Werte alle in der Spalte E19-E55 und F19-F55. Diese sind in jedem Tabellenblatt in dem Bereich und sollen halt von allen ausgewählten Blättern summiert werden ohne dass ich manuelle die Funktion "=ZweiteTabelle!B1+'Sonstige Tabellen'!B1" einfügen muss, da halt ständig neue dazukommen und bei über 60 Werten ist das nervig das manuell zu machen. Daher war die jetzige Lösung über den Code oder über deine Variante die Liste zu erstellen und dann z.B. mit =SUMMEWENN(B:B;"x";P:P)die Summen zu bilden schon besser. Aber die Datenmenge die ich da erst ein mal produziere verwirrt andere Nutzer dann doch eher...

Anzeige
AW: VBA verbessern
21.02.2013 14:04:19
Daniel
Hi
Resize vergrössert oder verkleindert einen Zellbereich auf die angegebene Zeilen oder Spaltenzahl:
Cells(19, 6) ist F19
Cells(19, 6).Resize(36) ist F19:F54
Cells(19, 6).Resize(, 36) ist F19:AO19
Cells(19, 6).Resize(36, 36) ist F19:AO54
Worksheetfunktion.Transpose tauscht in einer Matrix die Zeilen mit Spalten, dh aus
1 2 3
wird
1
2
3

Gruß Daniel

=Summe(a:d!Z1) owT
22.02.2013 15:22:40
Rudi

AW: =Summe(a:d!Z1) owT
25.02.2013 11:51:31
Julia
Was bringt mir =Summe(a:d!Z1)?
Nur noch mal zur Erklärung. Ich will durch VBA folgendes erreichen:
Beispiel:
In Tabelle 1 Zelle A1 soll die Summe aller Zellen A1 aus den Tabellenblätern 2,3,5 ausgegeben werden, Tabellenblatt 4 wird ausgelassen weil die Kalkulation noch nicht fertig ist.
DAs ganze dann für über 60 verschiedene Zellen,in denen ich die Summe brauche.
Mein Ziel ist, wenn neue Tabellenblätter hinzukommen, diese nur noch namentlich in den Code einzufügen aber nicht mehr in jede Zelle des Tabellenblattes 1 zu klicken und in der jeweiligen Formel die neuen Blätter einzeln ergänzen zu müssen.
Ist das möglich?
Danke und LG Julia

Anzeige
AW: =Summe(a:d!Z1) owT
25.02.2013 15:44:29
Daniel
Hi
=Summe(a:d!Z1)?
summiert die Zelle Z1 aller Tabellenblätter die zwischen Blatt A und Blatt D liegen (jeweils einschließlich dieser Blätter)
entscheidend ist hier die Reihenfolge innerhalb der Register.
fügst du also zwischen Blatt A und Blatt D ein weiteres Blatt ein, so wird dieses automatisch mit aufsummiert.
Liegt das neue Blatt jedoch links von Blatt A oder rechts von Blatt D, dann gehört es nicht zu Summe mit dazu.
möchtest du ein dawischenliegendes Blatt nicht mit aufsummieren, so musst du den Wert wieder abziehen:
=Summe(a:d!Z1)-c!Z1
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige