Zellbereiche verschieben/ausblenden wenn...
#1
Hallo zusammen

Da ich mich mit VBA wenig bis gar nicht auskenne, hoffe ich auf eure Hilfe.

Es geht um ca. 50 Kursanmeldungen, in der Beispieldatei habe ich nur 9 Stück erfasst, damit die Datei nicht so gross wird.

Das Ziel ist, dass das Tabellenblatt ausgedruckt wird, aber von diesen 50 Kursen nur jene Bereiche gedruckt werden, welche auch durchgeführt werden.

Also wenn die gelb markierte Zelle (z.B.) D13 grösser 3 ist, soll der Bereich stehen bleiben, ansonsten ausgeblendet werden.
Alternative: Wenn die gelb markierte Zelle grösser 3 ist, soll der betroffene Bereich in eine neue Tabelle kopiert werden, welche dann am Schluss ausgedruckt wird.

Das Problem ist hierbei auch noch, dass das Blatt maximal drei Bereiche nebeneinander haben soll und sonst eine neue „Reihe“ beginnen soll.
Im zweiten Tabellenblatt sieht die Datei eigentlich so aus, wie sie in diesem Beispiel am Schluss aussehen müsste.

Der Bezug der gelb markierten Zellen bleibt immer gleich: D13, I13, N13, D29, I29, N29, D45, etc.

Die Grösse der Bereiche bleibt dabei immer gleich.
1. Reihe: B1:F16 / G1:K16 / L1:P16
2. Reihe: B17:F32 / G17:K32 / L17:P32
3. Reihe: B33:F48 / etc.


Angehängte Dateien
.xlsx   Kursanmeldungen.xlsx (Größe: 26,03 KB / Downloads: 7)
Top
#2
Hallo,
Wozu kopieren? Du kannst auch von der "Kurse" drucken!
Aber wie soll gedruckt werden? Jeden Kurs auf einer Seite? Oder wie sonst?
Beachte bei mehreren Feldern können diese auch "zerteilt" werden!!
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Top
#3
Hallo Armin

Vielen Dank für deine Antwort, resp. Frage.

Von mir aus braucht es kein neues Tabellenblatt, ich kann auch direkt vom Blatt "Kurse" ausdrucken.
Aber da möchte ich eben nur diejenigen Bereiche ausdrucken, welche ein bestimmte Anzahl an Anmeldungen haben und somit auch durchgeführt werden.
Das hilft mir bei der Übersicht der stattfindenden Kurse und spart vor allem eine grosse Menge an Toner und Papier, welches nicht umsonst gedruckt wird.

Von den 50 Anmeldungen sind es vielleicht 12-16 an der Zahl. Es wären pro Blatt drei Bereiche nach rechts (s. Blatt Kurse Ausdruck) und fünf Bereiche nach unten. Also 3x5 pro Blatt.
Falls es mehr wie 15 Anmeldung wären, gibt es halt ein neues Blatt, das spielt keine Rolle.

Ich hoffe ich konnte es einigermassen verständlich erklären.

mfg, Ebi
Top
#4
Hallöchen,

hier mal ein Makro für das extra Blatt. Nicht übernommen wird dabei die Spalte A (T1...T6), die könntest Du aber vorbelegen und T1...T6 auch per Formel "ausblenden".

Code:
Sub ZusammenFassen()
'Variablendeklarationen
'Integer
Dim iCnt%, iCntZ%, iCntS%, arrKurse
'Array fuellen
arrKurse = Array("D13", "I13", "N13", "D29")
'Zaehler vorbelegen
iCntZ = 1: iCntS = 2
'Schleife ueber alle Kurse
For iCnt = 0 To UBound(arrKurse)
  'Wenn mehr als 3 Teilnehmer enthalten sind
  If Range(arrKurse(iCnt)) > 3 Then
     Range(arrKurse(iCnt)).Offset(-12, -2).Resize(16, 5).Copy Sheets("Kurse (Ausdruck)").Cells(iCntZ, iCntS)
     'Spaltenzaehler hochzaehlen
     iCntS = iCntS + 5
     'Wenn Spaltenzaehler = 4, dann
     If iCntS = 12 Then
       'Spaltenzaehler zuruecksetzen udn Zeilenzaehler hochzaehlen
       iCntS = 1: iCntZ = iCntZ + 16
     'Ende Wenn Spaltenzaehler = 4, dann
     End If
  'Ende Wenn mehr als 3 Teilnehmer enthalten sind
  End If
'Ende Schleife ueber alle Kurse
Next

End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo André

Vielen Dank für deine Hilfe.

Wir sind einen grossen Schritt weitergekommen, aber zwei Punkte sind noch offen:

Ich habe im Code nur folgendes angepasst:

Code:
arrKurse = Array("D13", "I13", "N13", "D29", "I29", "N29", "D45", "I45", "N45", "D61", "I61", "N61")

1. Nun kopiert es mir wirklich nur die durchzuführenden Kurse, aber im ersten Abschnitt füllt es mir nur zwei Kurse aus, statt drei und im nächsten Abschnitt macht's keinen Umbruch mehr nach drei Kursen, sondern es füllt alle nebeneinander aus.

2. Wie sage ich dem Code, dass er erst ab der Spalte B kopieren soll, damit ich die Spalte A frei habe für T1-T6?
Beim Test wurde ab A18 kopiert, statt ab B18.

Das Testblatt mit dem Tab Kurse (Ausdruck) habe ich mit hochgeladen.

Danke nochmals für deine Unterstützung
Gruss, Ebi
Top
#6
Hallöchen,

Wo da iCntS = 1 steht muss iCntS = 2 hin. Ich hatte noch was geändert und wohl nicht alles bis dorthin mitgenommen. Den Rest schau ich mir am PC an, bin gerade am Smartphone.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
Hallo

iCntS = 2 hat hingehauen und das mit dem Umbruch fast auch. Nur dass er mir jetzt immer nur zwei Kurse nebeneinander einfügt, statt drei.

Dann habe ich die Zeile

Code:
 If iCntS = 12 Then

auf

Code:
 If iCntS = 17 Then

geändert und siehe da, es hat geklappt. :28:

Ich werde nun das ganze Dokument nochmals durchtesten und dir dann Bescheid geben, wie's aussieht.  
Für dich also für's Erste erledigt. Vielen herzlichen Dank nochmals.
[-] Folgende(r) 1 Nutzer sagt Danke an ebitanem für diesen Beitrag:
  • schauan
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste