Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

druckvorlage basteln





Frage

Hallo Miteinander dieses Forum scheint ein unergründlicher Hort guter Infos zu sein, drum hätte ich folgende Fragestellung Wenn ich Excel als Datenbank für ein Raumbuch benutze, also pro Zeile einen kompletten Datensatz für einen Raum anlege (Größe, RaumNr., Decke, Wand, Boden, Türen, fenster usw.) dann habe ich zwar alles beieinander (ca. 2000 Datensätze notwendig) aber.. ein Druck auf diesem Tabellenblatt ist schlichtweg unlesbar. Meine Vorstellung wäre die: ein zweites Tabellenblatt anlegen mit Überschrift, Rahmen, vertikaler Anordnung der Daten und sonstiger Formatierung und natürlich mit Datenleerfeldern, die sich aus dem Blatt 1 jweils einen kompletten Datensatz, also einen Raum holen, . Blatt 2 dann drucken, sich den nächsten datensatz holen, wieder Blatt 2 drucken, bis zum letzten Raum. Wie kann ich denn das hinbekommen, ohne groß in VBA einsteigen zu müssen (Zeitdruck) Herzlichen Dank für Eure Antworten, vielleicht hat ja jemand schon ein analoges problem gelöst. Roland

Antwort 1 von JoeKe

Hallo Roland,

folgender Code überträgt die Spalten A-G der Tabelle1 zeilenweise beginnend bei Zeile 2 in Tabelle2 A2-G2 und druckt nach jedem Übertrag die Tabelle2 aus.


Option Explicit

Sub druck()
Dim loZeile As Long
For loZeile = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Tabelle2").Range("A2:G2") = Worksheets("Tabelle1"). _
Range(Cells(loZeile, 1), Cells(loZeile, 7)).Value
Worksheets("Tabelle2").PrintOut
Next
End Sub


MfG

JöKe

Antwort 2 von mikesch3

Hallo JöKe

Herzlichen Dank für deine Mühe,

Prinzip soweit kapiert, nur hatte ich bei der Komplexität der Aufgabe (is ´n blöder job, den ich da mache) vergessen zu erwähnen, dass die Zellen in Blatt 2 nicht an der gleichen Stelle sind wie in Blatt1d.h. z.B. der Wert von Blatt1 - A1 muß nach Blatt2 - C5, der von Blatt1 - A2 nach Blatt2 - D7 usw. damit die Druckvorlage übersichlicher gelesen werden kann. Hängt mit der Formatierung zusammen, Ergebnis vielleicht ähnlich eines gedruckten Berichts in Access, wo man die Datenfelder auf dem Blatt hui und herschieben kann und so auf die gestaltung Einfluß nehmen kann.

Geht das auch in Excel ?
Dank Dir für dein Hirnschmalz

Roland

Antwort 3 von JoeKe

Hallo Roland,

mit Access kenne ich mich leider so gut wie gar nicht aus.

Wenn es eine Systematik gibt nach der die Bereiche übertragen werden sollen lässt sich das mit VBA machen.
Dazu müsstes du mir aber genau mitteilen, welche Zellen wohin sollen.

Gruß

JöKe

Antwort 4 von mikesch3

Hallo JöKe


ich will ja nicht, dass du meine Arbeit machst.
Es wäre mir aber eine Hilfe,wenn Du exemplarisch an einer Zelle zeigen könntest, wie das tut.

Also obiges Beispiel benutzend, wenn ich will, dass Die Zelle A2 aus Blatt1 nach C5 (klingt ja wie ein Schachzug) auf Blatt2 dargestellt werden soll, welchern Zusatzeintrag im Skript brauch ich denn dann.

das wär mir bereits ne große Hilfe


dank dir nochmal

gruß roland

Antwort 5 von CaroS

Hallo Roland,

während JöKe seinen VBA-Ansatz bestimmt gern selber weiterführt, könnte ich Dir zwischendurch mal eine Lösung auf der Basis von Tabellenfunktionen und Formeln anbieten. (Nicht erschrecken, es ist ein bisschen mehr Text geworden, aber so schlimm ist es gar nicht!)

Du als "Datenbanker" hast sicherlich kein Problem damit, wenn ich sage, dafür brauchen wir aber als erstes mal einen eindeutigen Primärschlüssel für sämtliche Datensätze. Der denkbar einfachste genügt völlig: eine fortlaufende Nummerierung (aber jeder andere tut es genauso). Und ich hätte den Primärschlüssel gerne in der ganz linken Spalte, also in der Spalte A.

Hier mal 2 Möglichkeiten (a und b) für eine fortlaufende Nummerierung in Spalte A:
1. Spalte A markieren (durch Klick auf den Spaltenkopf A), Menü Einfügen -- Spalten.
2a. Zahlen eingeben in A1: 1 und in A2: 2.
3a. Zellen A1 und A2 zusammenhängend markieren, auf Ziehpunkt (rechts unten) von Zelle A2 linke Maustaste drücken und ... (weiter mit 4.)
Oder 2b. In A1 Formel eingeben: =ZEILE()
3b. Zelle A1 markieren, auf Ziehpunkt (rechts unten) linke Maustaste drücken und ...
4. ... Maus bis in Zelle A2000 (bzw. so weit wie nötig) runterziehen - mit oder ohne "Absetzen" zwischendurch. Immer nur den Ziehpunkt weiter nach unten ziehen bzw. wenn nötig, wie in 3. die letzte/letzten beiden Zelle(n) markieren und dann weiter ziehen.

(Falls in Zeile 1 ff. eine Überschrift und Dein erster Datensatz erst weiter unten steht und Du Hilfe beim Anpassen der Nummerierung brauchst, bitte nachfragen!)

Deine Datenfelder stehen jetzt also auf dem Tabellenblatt ´Tabelle1´ in den Spalten ab B. Für den Ausdruck der Datensätze muss nun ein weiteres Tabellenblatt (z. B. ´Tabelle2´) vorbereitet werden.

Dort wird zunächst eine Zelle (z. B. B3) benötigt, in die der Primärschlüsselwert des zu druckenden Datensatzes eingegeben wird. Schreibe entweder in die Zelle links da-neben (A3) eine passende Beschriftung (Datensatz-Nr.:) oder gib der Zelle B3 (zwecks Wiedererkennung, sie ist wichtig) einen Rahmen oder einen farbigen Hintergrund.

Nun musst Du die auszudruckenden Daten auf dem Tabellenblatt ´Tabelle2´ anordnen und ggf. beschriften. Verwende (paarweise) jeweils 2 getrennte Zellen für die (unver-änderlichen) Beschriftungen und die (veränderlichen) Werte der Datensätze, wobei es empfehlenswert, aber nicht nötig ist, zeitweilig anstelle der jetzt noch nicht vorhandenen Datenwerte feste Beispielwerte einzutragen, um daran (stellvertretend) Formatierungen vorzunehmen und die gesamte Anordnung und optische Wirkung zu beurteilen. (Man kann das auch noch später mit den "richtigen" Werten erledigen.)

Zum Schluss müssen in die vorgesehenen Datenfelder Formeln eingetragen werden, d. h. die Platzhalter für die Datenwerte werden dabei wieder gelöscht bzw. durch Formeln überschrieben. Jede einzelne Formel sorgt dafür, dass sie einen bestimmten Wert "holt" und in der Zelle anzeigt, in der sie selbst steht. Im normalen Excelbetrieb sind in den Zellen also nicht die dort eingetragenen Formeln sichtbar (und druckbar), sondern deren "Ergebnisse".

Für die Bereichsangabe in der Formel werden die erste und die letzte der von Deinen Datensätzen belegten Zellen (linke obere und rechte untere Zelle) benötigt. Das könnten z. B. die Zellen A1 und U2000 (oder A3 und U2002 - bei genau 2000 Datensätzen und 20 Datenfeldern pro Datensatz) sein.

Allerdings würde es auch nicht schaden, den Bereich schon etwas größer anzugeben, als er zurzeit mit Daten gefüllt ist, dann hätte man für späteren Zuwachs gleich "ein bisschen Reserve".
(Ich würde vor allem bei den Zeilen etwas großzügiger ein "paar" dazugeben als bei den Spalten. Was hier sinnvoll ist hängt jedoch davon ab, wie sich Deine Datenbank entwickelt, aber es schadet wirklich nicht, weder in der einen, noch in der anderen Richtung. So lange, bis die Datenbank dann wirklich mal über die jetzt angegebenen Grenzen hinaus wächst, kann es Änderungsaufwand sparen.)

Das wichtigste ist nun die richtige Zuordnung der Datenspalten von ´Tabelle1´ zu den einzelnen Datenfeldern in ´Tabelle2´. Dafür musst die Spalten abzählen, in denen die Datenwerte in der ´Tabelle1´ stehen. Die Zählung erfolgt relativ zur Primärschlüsselspalte. Mit Spalte A = Primärschlüsselspalte = 1 ist also Spalte B = 2, Spalte C = 3, ..., Spalte J = 10, ..., Spalte O = 15, ..., Spalte T = 20 usw.

[Fortsetzung folgt]

Antwort 6 von CaroS

Wenn z. B. die Größe des Raumes in ´Tabelle1´ in Spalte B (= 2) steht und in ´Tabelle2´ in der Zelle B5 erscheinen soll, dann muss in die Zelle B5 in ´Tabelle2´ folgende Formel eingetragen werden (damit in dort dann später der entsprechende Wert angezeigt wird):

_Parameter:_ _1_ , __ 2___ , _____3_____ , 4 , __ 5 __
=SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 2; FALSCH)

Erläuterung der Parameter:
Das Gleichheitszeichen, der Name der Funktion und die Klammern sind immer gleich: =SVERWEIS( ... ) .

_1_: Die Eingabezelle $B$3 ist auch immer gleich. Falls nicht B3 die Eingabezelle ist, sondern eine andere, dann deren Zellbezeichnung verwenden. (Die $-Zeichen (= absolute Bezüge) sind nicht ganz so wichtig, können aber helfen, Kopierfehler zu vermeiden.)

_2_: Der Name des Tabellenblattes, auf dem die Datensätze stehen (einschließlich !-Zeichen) ist ebenfalls immer gleich.

_3_: Der Bereich der Datensätze $A$1:$U$2000 (sprich: von Zelle $A$1 bis Zelle $U$2000) kann auch in allen Formeln gleich angegeben werden und er kann, wie gesagt, von vornherein größer angegeben werden, als er im Moment belegt ist, z. B. $A$1:$X$25000. (U->X: 3 Spalten mehr, 2.000->25.000: 23.000 Zeilen mehr)

_4_: Das wichtigste: die Zuordnung der Werte über die relative Spaltennummer!
Das ist, je nachdem, welcher Wert aus welcher Spalte von ´Tabelle1´ "geholt" werden soll, immer eine andere Zahl.
    Größe des Raumes -> Spalte B -> 2,
    RaumNr. -> Spalte C -> 3,
    Decke -> Spalte D -> 4,
    Wand -> Spalte E -> 5,
    Boden -> Spalte F -> 6 usw.
(Bei dieser Zuordnung geht es nur um die Werte innerhalb eines Datensatzes, die Auswahl des anzuzeigenden/auszudruckenden Datensatzes erfolgt später über die Eingabe des Primärschlüsselwertes.)

_5_: Das letzte Semikolon und der Parameter FALSCH müssen nur angegeben werden, wenn die Werte in der Primärschlüsselspalte nicht aufsteigend sortiert sind.

Ein Beispiel, wie sowas insgesamt aussehen könnte:
B1: Überschrift
A3: Datensatz-Nr.: (als Beschriftung des Eingabefeldes)
B3: Hier Eingabe des Primärschlüsselwertes des anzuzeigenden Datensatzes.
A5: Größe des Raumes: (als Beschriftung)
B5: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 2; FALSCH) (- holt Wert aus Spalte B)

D5: Raum-Nr.: (als Beschriftung)
E5: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 3; FALSCH) (- holt Wert aus Spalte C)

A7: Decke: (als Beschriftung)
B7: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 4; FALSCH) (- holt Wert aus Spalte D)

D7: Wand: (als Beschriftung)
E7: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 5; FALSCH) (- holt Wert aus Spalte E)

G7: Boden: (als Beschriftung)
H7: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 6; FALSCH) (- holt Wert aus Spalte F)

A9: Türen: (als Beschriftung)
B9: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 7; FALSCH) (- holt Wert aus Spalte G)

D9: Fenster: (als Beschriftung)
E9: =SVERWEIS($B$3; Tabelle1!$A$1:$U$2000; 8; FALSCH) (- holt Wert aus Spalte H)
...

Je nachdem, wie viel Platz Du für einen Datensatz brauchst (und ob Du überhaupt willst), kriegst Du wahrscheinlich sogar 2, 3 oder mehr Datensätze auf ein A4-Blatt ausgedruckt. Mit den gewöhnlichen Einstellungen passen 56 Excel-Zeilen auf ein A4-Blatt, aber daran lässt sich noch eine ganze Menge ändern.
Mit 7 Zeilen (einschließlich Eingabe des Primärschlüsselwertes) für einen Datensatz (3, 5, 7, 9, 11, 13, 15) und durch Änderung der Höhe der Leerzeilen (die Zeilen 1, 2, 16, 30 und 44 auf Zeilenhöhe 25, alle anderen geradzahligen Zeilen auf Zeilenhöhe 10) kriegt man z. B. 4 komplette Datensätze auf ein A4-Blatt:

Zeile 1: Überschrift (H = 25)

Zeile 2: Leerzeile (H = 25)

Zeile 3: DS1 - Eingabezelle, Zeilen 5 - 15: DS1 - Werte

Zeile 16: Leerzeile (H = 25)

Zeile 17: DS2 - Eingabezelle, Zeilen 19 - 29: DS2 - Werte

Zeile 30: Leerzeile (H = 25)

Zeile 31: DS3 - Eingabezelle, Zeilen 33 - 43: DS3 - Werte

Zeile 44: Leerzeile (H = 25)

Zeile 45: DS4 - Eingabezelle, Zeilen 47 - 57: DS4 - Werte

In diesem Beispiel müsstest Du nur die Zeilen 3 bis 15 "blockweise" markieren und in die Zeilen 17, 31 und 45 kopieren und in jedem "Block" die Formeln an die jeweilige Eingabezelle anpassen, das wäre alles. Also =SVERWEIS($B$3; ... ersetzen durch
=SVERWEIS($B$17; ... ,
=SVERWEIS($B$31; ... bzw.
=SVERWEIS($B$45; ...

Antwort 7 von CaroS

Sieht jetzt erstmal viel aus, ist vielleicht auch viel zu detailliert beschrieben, ist aber - bis auf die neu zu erstellende Beschriftung der Felder - nicht mehr als 5 Minuten Arbeit, da fast alles kopiert werden kann und immer nur eine einzige Zahl pro Formel angepasst werden muss.

Gruß,
CaroS

Antwort 8 von JoeKe

Moin Roland,

hier mal ein Beispiel für Spalte A.

Option Explicit

Sub druck()
Dim loQuelle As Long, intSpalte As Integer, loZiel As Long
intSpalte = 3
loZiel = 5
For loQuelle = 2 To Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Tabelle2").Cells(loZiel, intSpalte) = _
Worksheets("Tabelle1").Cells(loQuelle, 1).Value
intSpalte = intSpalte + 1
loZiel = loZiel + 2
Next
Worksheets("Tabelle2").PrintOut
End Sub


Es wird die Spalte A Tabelle1 zeilenweise nach Tabelle2 übertragen. In Tabelle2 werden die Zielzellen nach jedem Durchgang um eine Spalte nach rechts und zwei Zeilen nach unten verschoben.
Hier
intSpalte = 3
loZiel = 5

wird die erste Zielzelle bestimmt. Und mit
intSpalte = intSpalte + 1
loZiel = loZiel + 2

werden die Sprungweiten bestimmt.
Ich hoffe das hilft dir weiter.

Gruß
JöKe

PS: Bei der Cells-Methode bestimmt die erste Zahl die Zeile und die zweite Zahl die Spalte. Cells(2, 3) = C2

Antwort 9 von mikesch3

Also leute ihr seid echt super !!!!!

ich setz mich jetzt übers wochendende an meine hausaufgaben und falls ich noch rückfragen habe (nette umschreibung des wortes PROBLEM) müsst Ihr mich halt montag wieder ertragen.
Nur so am Rande: Bei Donald Duck gabs einen Erfinder namens Daniel Düsentrieb, der hatte immer geniale Hilfestellung von einem kleinen intelligenten Roboter mit Glühlampenkopf auf seiner Schulter und der hieß HELFERLEIN

In diesem Sinn
Dank euch allen Helferleins
schönes wochenende

roland

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: