Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wie bringe ich Matizen ins VBA und wie 29.02.

Wie bringe ich Matizen ins VBA und wie 29.02.
07.06.2006 14:52:08
HorstH
Hallo,
habe 12 fast identische Matrizen, weiß aber nicht, wie ich das ins VBA bringe, damit dadurch 12 Bereiche verformelt werden:
in den Bereich 1 (F3:AJ26):~f~
{=SUMME((MONAT('01'!$O$2:$BX$2)=$D3)*(TAG('01'!$O$2:$BX$2)=F$2)*(LINKS('01'!$B$3:$B$2000;1)=LINKS($B3;1))*('01'!$F$3:$F$2000=Tabelle2!$C3)*('01'!$O$3:$BX$2000="x"))}
in den Bereich 2 (F27:AG50 bzw. bei 29.02. AH50):
{=SUMME((MONAT('02'!$O$2:$BT$2)=$D27)*(TAG('02'!$O$2:$BT$2)=F$2)*(LINKS('02'!$B$3:$B$2000;1)=LINKS($B27;1))*('02'!$F$3:$F$2000=Tabelle2!$C27)*('02'!$O$3:$BT$2000="x"))}
usw. bis Bereich 12. Es ist eine Tabelle (F2:AJ2 sind die Kalendertage 1 ...31), in D stehen 1...12 für Monate und die Quellen '01', '02' bis '12' enthalten die Daten der jeweiligen Monate; addiert entsprechend der übrigen Kiriterien. Zwar sind die Quelltabellen '01' usw. unterschiedlich in der Zeilenanzahl, jedoch kann ich mit festem Satz von 2000 oder 3000 Zeilen leben.
Wie setze ich die Eintragungen der Matrizen in die Bereiche in z. B. Tabelle2! um? Die Bereiche sind alle gleich groß und fortlaufend untereinander. Und wie macht man das, dass den Tagesanzahl des jeweiligen Monats entsprechen auch nur soweit die Matrizen eingetragen werden (Spalte F:AJ)?? Wer kann mir hier mit VBA helfen? Gruß Horst

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

Betreff
Datum
Anwender
Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
11.06.2006 11:00:37
schauan
Hallo Horst,
zeichne mal auf wie Du es in einem Bereich tust und poste den code. Dann sehen wir weiter. Das ganze muss dann variabel gestaltet werden, z.B. mit einer For -schleife und Variablen für die Blätter oder Bereiche ...

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

AW: Wie bringe ich Matizen ins VBA und wie 29.02.
12.06.2006 12:36:34
HorstH
Hallo 'schauan',
erst einmal vielen Dank für Antwort. Habe Dateien soweit minimiert zwecks upload (Bitte Datei 2 in die 1 kopieren). Durch Suche im Forum kann ich nun 2 sheets anhängen, mit identischem Format (1. zählen/Summe der "x" aus den Monatstabellen "01" bis "12", 2. die Summe der Zahlen (=2.Datumsspalten mit A)). Das Original hat tausende Objekte und nur die Zeilenanzahl ist variable. Ich möchte nun unter dem jeweiligen Datum (Tag+Monat-Koordinate) die Summen entsprechend Kriterium Filiale und Frequenz. Die Formeln sollten zum Schluss als Werte darstehen, da jede Woche hieraus neue Grafiken erstellt werden sollen, und die Tabellen mit Grafiken werden mit versch. Teilsummen ausgestattet für konsolidierende Wirkung. Meine Formel für Müllsäcke muss einen Fehler haben. Und es ollte auch der 29. Februar berücksichtigt werden. Wirf doch bitte einmal einen Blick hinein. Den Rattenschwanz der Cell-Eintragungen weiß ich nicht besser zu machen. Vielleicht kannst du ein script entwerfen? Das wäre super!! Danke!
Gruß Horst
Datei 1: https://www.herber.de/bbs/user/34308.xls
Datei 2:

Die Datei https://www.herber.de/bbs/user/34309.xls wurde aus Datenschutzgründen gelöscht

Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
12.06.2006 17:02:58
schauan
Hallo Horst,
mal ein erster Gedanke. Deine Formel reagiert algerisch, wenn Du im Februar einen 29. drin hast und es gibt keine. Wenn Du das Datum rausnimmst dann geht es. Was spricht dagegen, den 29. im Blatt 02 mit einer Wenn-Formel zu steuern?
im Prinzip so:
=WENN(TAG(DATWERT("28.02.2006")+1)=29;"29.02.2006";"")

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
12.06.2006 15:02:23
HorstH
Hallo 'schauan',
anbei ein fast lauffähiges script - der Februar will nicht. Vielleicht sehe ich den Wald vor lauter Bäumen nicht.
Gruß
Horst
https://www.herber.de/bbs/user/34313.txt
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
12.06.2006 17:05:17
schauan
... ich nochmal.
die Formel muss so sein:
=WENN(TAG(DATWERT("28.02.2006")+1)=29;"29.02.2006";0)
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
13.06.2006 10:13:16
HorstH
Hallo 'schauan',
habe nur im Büro Internet und um kurz vor 17:00 h werden die Türen abgeschlossen. Deshalb erst jetzt. Eine wenn-Formel habe ich im Original eigentlich nur zu Anfang, wenn die Datei mit den 12 Registern erstellt wird - aufgrund der Jahreseingabenaufforderung, um die Vorlage für das Jahr zu erstellen (=WENN(TAG($BQ$2+1)=1;"";$BQ$2+1) steht in BS2 und BT2->holt vom Monatsersten Zelle A2. Nun deine Formel drin - läuft. Ich habe zuhause noch einmal den code für meine Verhältnisse (Anfänger) verbessert. Dein Angebot, das Ganze über z. B. Schleifen zu steuern, würde ich gerne annehmen. Ich bekomme nämlich nicht den 2. Teil hin, dass bei der anderen Routine (nicht die x zählen, sondern die Werte in den jeweiligen Spalten daneben) immer die 2. Datumsspalte ausgewählt werden muss. Vermutlich mit For i = 15 To 76 Step 2, aber mit der Umsetzung hapert es noch sehr bei mir. Wenn ich so meinen beigefügten code betrachte, ändert sich eigentlich nur immer der Bereich der Formeleinsetzung und das anzusprechende Blatt 01, 02 ... 12. - das kann ich noch nicht. Beim Test zuhause mit 700 Zeilen z. B. wurde für die ganze Prozedur ca. 18 Minuten benötigt. Ist das eine Relation? Freue mich und es wäre prima, wenn du mir weiterhilfst!!
https://www.herber.de/bbs/user/34325.zip
Andere Fragestellungen setze ich in einen neuen hread - so ist doch die Regel?! Bis bald...
Gruß
Horst aus Bremen
Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
13.06.2006 17:59:38
schauan
Hallo Horst,
ein Teil Deiner 18 Minuten liegt daran, dass Du alle Zellen einzeln füllst. Hier mal ein schnellerer Ansatz in verschiedenen Ausführungen:
Range("A1:A11") = "Ernie"
[b1:b11] = "Cindy"
Range(Cells(1, 3), Cells(11, 3)) = "Bert"
Union(Range("F1:F3"), Range("G1:G3")) = "Heller"
Das mit den eckigen Klammern ist eine Kurzform von Range ... und mit dem Union kannst Du mehrere unzusammenhängende Bereiche füllen.
Dann solltest Du zumindest beim Erstellen das Berechnen ausschalten, entweder vorher manuell oder im code.
Application.Calculation = xlCalculationManual
und am Ende wieder den Ausgangszustand setzen, z.B.
Application.Calculation = xlCalculationAutomatic
Wenn Du was kopieren willst geht auch in mehrere unzusammenhängende Bereiche kurz und schmerzlos
Range("A3").Copy Union(Range("F4:F6"), Range("G4:G6"))
Das wäre für die 1x / Woche und was Du sonst noch so oft verteilst anwendbar. Bei einem Bereich dann ganz unpolitisch ohne die Union, da kommen z.B. die Stadtteile in Frage ...
Wobei das weiter oben beschriebene Füllen zu bevorzugen wäre.
Wenn die Monate in bestimmten Bereichen übereinstimmen wäre auch ein "Masterblatt" von Vorteil.
Da muss man sehen ob man im Master diesen Teil oder auch alles reinpackt und in den Monaten dann ändert oder im Master etwas weniger hat und die Monate auch wieder anpasst.

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
14.06.2006 15:03:31
HorstH
Hallo 'schauan',
sauber und informativ - super! Danke für dein posting. Ich werde deine Vorschläge umsetzen. Durch ein bekommenes VBA entsteht die Datei, worin sich alle Einzelmappen chronologisch monatsweise wiederfinden. Es sind 8 Filialen, die darin zusammengeführt werden. Da setze ich nun auf, indem ich die 2 neuen sheets hinzufüge (1. neues sh enthält Summierung aller x der 1. Datumspalte; 2. neues sheet enthält alle summierten Zahlen der 2. Datumsspalte). Ich habe es schon mit Blätter kopieren versucht, um aus einer vorbereiteten anderen Datei diese 2 Summierungstabellen an die per VBA erstellte Datei anzuhängen, bekam aber Bezugs- bzw. Verknüpfungsprobleme. Wo ich noch nicht hintergkommen bin ist, wie ich die Formeln schreiben muss, damit für das 2. sheet die jeweiligen 2. Datumsspalten nur angesprochen werden. Habe schon mit &Spalte probiert, klappte nicht. Danke für die Unterstützung! Evtl. frage ich noch einmal nach, wenn ich nicht weiterkomme.
Gruß
Horst
Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
14.06.2006 16:49:15
HorstH
Hallo 'schauan'
bin fleißig beim Umsetzen deiner Vorschläge und trotz unterschiedlicher FormelKonstellationen habe ich mit den 4 Vorschlägen zwecks Eintragungen in die Zellen keinen Erfolg:
=SUMME((MONAT('01'!$O$2:$BX$2)=$F3)*(TAG('01'!$O$2:$BX$2)=G$2)*(LINKS('01'!$B$3:$B$2000;1)=LINKS($B3;1))*('01'!$F$3:$F$2000=$C3)*('01'!$O$3:$BX$2000="x"))
Strg+Shift+Enter
es wird leider in j e d e Zelle die gleiche Formel eingetragen - keine Anpassung bei den variabel gehaltenen )=$F3)*( )=G$2)*( )=LINKS($B3;1))*( 2000=$C3)*( bleiben alle gleich. Wie ändere ich das mit den nicht absoluten Bezügen? Werde noch weiter probieren. Melde mich Morgen, zuhause kein internet.
Gruß
Horst
Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
14.06.2006 17:49:22
schauan
Hallo Horst,
alles geht auch nicht :-( Wenn was unterschiedliches rein soll dann eher mit copy wenn es nicht, wie Du schon versucht hast, mit Zeile() oder Spalte() geht ...
Bei den Arrayformeln könntest Du so programmieren:
Range("B1").FormulaArray = _
"=SUM((MONTH('01'!R2C15:R2C76)=R[2]C6)*(DAY('01'!R2C15:R2C76)=R2C[6])*(LEFT('01'!R3C2:R2000C2,1)=LEFT(R[2]C2,1))*('01'!R3C6:R2000C6=R[2]C3)*('01'!R3C15:R2000C76=""x""))"
Range("B1").Copy Range("B2:B3")

Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
15.06.2006 09:49:36
HorstH
Hallo André,
sorry - meine letzte mail war völliger Blödsinn; war nicht mein Tag gestern. Natürlich hatte ich abends zuhause es so gemacht, gleich mit Union. Insgesamt, durch viel Union, blieb nur noch ca. 1/30 des Textes übrig. Das gefällt mir. Tipps, so dargestellt wie durch dich, bleiben dann auch gleich im Kopfe. Ich recherchiere noch bei herber, ob ich Tipps finde, wie ich per Formel immer die zweite Datumsspalte ansprechen kann. Oder geht das gar nicht, sondern nur über z. B. eine Schleife? Laboriere erst einmal mit dem bisherigen:
'alle Dezember 31
[G36].FormulaArray = _
"=SUM((MONTH('12'!R2C15:R2C76)=RC6)*(DAY('12'!R2C15:R2C76)=R2C)*(LEFT('12'!R3C2:R2000C2,1)=LEFT(RC2,1))*('12'!R3C6:R2000C6=RC3)*('12'!R3C15:R2000C76=""x""))"
Range("G36").Copy Union(Range("G37:G38"), Range("H36:AK38"), Range("G73:AK75"), Range("G108:AK110"), Range("G144:AK146"), Range("G180:AK182"), Range("G215:AK217"), Range("G251:AK253"), Range("G288:AK290")) Strg+shift+enter
Bei Schleifen weiß ich zwar meist, was ich anfassen muss, mache es aber noch immer falsch. Obige Formel würde ich z. B. nur 1 mal verwenden mit vielleicht 2 Schleifen, äußere zum Register ansprechen (vielleicht index("00"..."12"), innere (da gleiche Anzahl Zeilen) auf Bereiche (januarbereich: Range("G42:AK44"); Februarbereich: Range("G42:AK44") usw. also alle 3 Zeilen weiter - aber irgendwie bockt mein Kopf hier. Wieder sachlich: Bekomme ich es nicht hin mit der 2. Zeile im gleichen Bereich, wäre ich für letztmalige Hilfe zu diesem thread äußerst dankbar, weil sonst muss ich den Weg über alle 1. Spalten löschen gehen.
Danke und Gruß
Horst aus Bremen
Sofern benötigt, anbei die 2 .bas
https://www.herber.de/bbs/user/34372.zip
Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
15.06.2006 18:33:52
schauan
Hallo Horst,
erst mal noch eine Vereinfachung. Wenn Du eine Zahlenreihe hast kannst Du es entsprechend dem
Menü | Bearbeiten | Ausfüllen | Reihe
tun. Wenn Du den code aufzeichnest kommt so was ähnliche raus:
.Cells(2, 7) = 1
.Range(.Cells(2, 7), .Cells(2, 7 + 30)).DataSeries Rowcol:=xlRows, Type:=xlLinear, Date:=xlDay, Step _
:=1, Stop:=31, Trend:=False
Ich habe hier schon wieder zusammengefasst und mal als Beispiel Range und cells kombiniert. Im aufgezeichneten code sieht das etwas anders aus, da ist ein Select dabei das fällt so weg, und der Bereich wie gesagt mal mit cells. Gerade wenn es um das Spaltenzählen geht ist das einfacher als zu überlegen, welcher Buchstabe denn in Spalte 37 steht ...
Dann stehen hier noch die Punkte vor Range und Cells für Dein With.
Schleifen:
mit den Zeilen und Spalten ist einfach,
For Zeile=3 to 10 step 7 'dadurch Eintrag in Zeile 3 und 10
For spalte=1 to 62 step 2 'dadurch Eintrag in jede zweite Spalte
'Dann ist spalte 1, 3, 5 usw. und Du nimmst
Cells(Zeile, Spalte)="..."
Next 'kann man auch next spalte schreiben
Next ' kann man auch next zeile schreiben
Bei den Blättern wird es etwas komplizierter.
Variante 1:
Excel-interne Blattnummer ist regelmässig und bekannt
For i=1 to 12
Sheets(i).activate
msgbox activesheet.name
next
Wenn das nicht so einfach geht dann muss man die Blattnamen analysieren oder man hat ein Namensarray

Sub test()
Dim BlattNamen 'ohne As... ist Variant
Dim i% 'Kurzform von Integer
BlattNamen = Array("Jan", "Feb", "Mrz", "...")
For i = LBound(BlattNamen) To UBound(BlattNamen)
'besser For i=0 to 3 wenn man die Arraygrenzen kennt
MsgBox "Wert " & i & " aus Array BlattNamen: " & BlattNamen(i)
Sheets(BlattName(i)).Activate 'geht natürlich nur, wenn Blätter existieren
MsgBox ActiveSheet.Name
Next
End Sub


Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
AW: Wie bringe ich Matizen ins VBA und wie 29.02.
16.06.2006 12:39:39
HorstH
Hallo André,
danke für die sehr interessanten Ausführungen. Da hab´ich ja am Wochenende genug vor mir - muss ich erst einmal sacken lasse und sicherlich viel probieren, bis der Groschen (Cent :-)) endgültig gefallen ist. Mal sehen, wie ich das so hinbekomme mit der Umsetzung. Ich danke dir s e h r für deine ausführliche Hilfe und Unterstützung. Hat mir Spaß gemacht und konnte viel mitnehmen. Vielleicht begegnen wir uns ja bei Herber's mal wieder. Wünsche dir ein schönes Wochenende!
Gruß
Horst

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige