![]() |
|
|
zurück zur ÜbersichtDiskussionsgruppe: TabellenkalkulationGuten Morgen,
Von: JaO1000 Datum: 21.03.2007, 11:23
alle Antworten zu dieser FrageAntwort 1 von JaO1000 vom 21.03.2007, 11:38 Falls es euch hilft: Diese Seite hat mich auf die Idee mit dem Makro gebracht: http://xltreff.de/makro/umsortieren.htm Allerdings weiß ich nicht, wo ich anfangen soll, diesen Code für mich umzustricken. Also was ich brauche ist ein Automatismus der sagt, guck in die Zelle und kopier den Inhalt in eine bestimmte Zelle in das Arbeitsblatt "Auswertung". Und das ganze im immergleichen Schema (also im Prinzip nix Wildes) C2 auf Auswertung!L2 (und 37 Zeilen weiter unten) C39 auf Auswertung!L3 (und 37 Zeilen weiter unten) C76 auf Auswertung!L4 ... Dementsprechend dann auch mit den anderen Spalten: B1 auf Auswertung!A2 (und 37 Zeilen weiter unten) B38 auf Auswertung!A3 ... Wie bekomme ich das mit nem Makro hin? Antwort 2 von Kauz1 vom 21.03.2007, 22:41 Hallo Namenloser... ich hab mal was zusammengebastelt: Private Sub CommandButton1_Click() ' ' Von Tabelle1 die Zellen A1 bis A37 werden kopiert, ' und in Tabelle2 in Zeile10 ab Spalte A Tranpondiert (Waagerecht) wieder eingefügt. ' In letzteZeile steht die Nummer der letzten Zeile mit Inhalt. ' Der Wert geteilt durch 37 ergibt die Anzahl der Schleifendurchläufe. sub Umsortieren letztezeile = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536) Anzahl = Int(letztezeile / 37) For i = 0 To Anzahl Sheets("Tabelle1").Activate Sheets("Tabelle1").Range("A" & i * 37 + 1 & ":A" & i * 37 + 37).Copy Sheets("Tabelle2").Activate Sheets("Tabelle2").Cells(10 + i, 1).Activate Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Next i Sheets("Tabelle2").Range("A1").Activate End Sub Ob es das trifft, was Du Dir vorstellst kannst Du ja mal kundtun. Das Beispiel kopiert 37 senkrechte Zellinhalte von einem Blatt in 37 waagerechte Zellen eines anderen Blattes. Probier mal aus Gruss Andreas Antwort 3 von Kauz1 vom 21.03.2007, 22:45 Hallo Namenloser.. Ich hab mal ein wenig gebastelt: --------------------------------------------------------------------- Sub Umsortieren ' ' Von Tabelle1 die Zellen A1 bis A37 werden kopiert, ' und in Tabelle2 in Zeile10 ab Spalte A Tranpondiert (Waagerecht) wieder eingefügt. ' In letzteZeile steht die Nummer der letzten Zeile mit Inhalt. ' Der Wert geteilt durch 37 ergibt die Anzahl der Schleifendurchläufe. letztezeile = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536) Anzahl = Int(letztezeile / 37) For i = 0 To Anzahl Sheets("Tabelle1").Activate Sheets("Tabelle1").Range("A" & i * 37 + 1 & ":A" & i * 37 + 37).Copy Sheets("Tabelle2").Activate Sheets("Tabelle2").Cells(10 + i, 1).Activate Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Next i Sheets("Tabelle2").Range("A1").Activate End Sub ------------------------------------------- Probier mal aus... Gruss Andreas Antwort 4 von Kauz vom 21.03.2007, 23:36 Hallo.... Entschuldigung für's doppelt Posten. War der Meinung, beim 1. Mal hat' s nicht geklappt. Inzwischen hab ich auch mein Passwort wiedergefunden, und mich diesmal richtig eingeloggt. Gruss Andreas Antwort 5 von JaO1000 vom 22.03.2007, 08:44 Hallo Kauz, vielen Dank für die schnelle Antwort - ich werde deinen Tipp gleich einmal ausprobieren und schauen was passiert bzw. gucken inwieweit man den Code noch erweitern müsste. Nochmal tausend Dank Ich melde mich im Laufe des Tages Antwort 6 von JaO1000 vom 23.03.2007, 09:12 Guten Morgen, ich habe dein Makro mal ausprobiert, es sieht nun folgendermaßen aus: Sub Umsortieren() ' ' Von Tabelle1 die Zellen A1 bis A37 werden kopiert, ' und in Tabelle2 in Zeile10 ab Spalte A Tranpondiert (Waagerecht) wieder eingefügt. ' In letzteZeile steht die Nummer der letzten Zeile mit Inhalt. ' Der Wert geteilt durch 37 ergibt die Anzahl der Schleifendurchläufe. letztezeile = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536) Anzahl = Int(letztezeile / 37) For i = 0 To Anzahl Sheets("Daten").Activate Sheets("Daten").Range("A" & i * 37 + 1 & ":A" & i * 37 + 37).Copy Sheets("Auswertung").Activate Sheets("Auswertung").Cells(2 + i, 1).Activate Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Next i Sheets("Auswertung").Range("A1").Activate End Sub Die ersten 37 Zeilen der Spalte A werden ordnungsgemäß in Tabelle 2 bzw. "Auswertung" in die 2. Zeile kopiert. Allerdings geschieht das nicht mit den nächsten 37 Zeilen. Woran liegt das? Ich verstehe im Besonderen nicht, wie ich den folgenden Bereich des Makros auf meine Bedürfnisse anwenden kann: " Sheets("Daten").Range("A" & i * 37 + 1 & ":A" & i * 37 + 37).Copy " (ich will ja, wie oben angesprochen, die Daten auch ein bisschen umsortieren, d.h. im immerselben Rythmus anordnen, nicht nur: Zellen A1-A37 werden zu A1-AK1) Was hat es mit " ("A" & i * 37 + 1 & ":A" & i * 37 + 37) " genau auf sich? Könnte mir jemand die Operatoren bzw. Variablen kurz erläutern? Vielen Dank schonmal Jan Antwort 7 von Kauz vom 23.03.2007, 20:02 Hallo Jan Wieviele Zeilen mit Inhalt gibt es denn in Spalte A? Ich hab es bis 148 ausprobiert..(4 mal ein 37er Block). Warum bei Dir nur die ersten kopiert werden weiß ich im Mom. auch nicht. Kommt eine Fehlermeldung? Die Zeile: Sheets("Daten").Range("A" & i * 37 + 1 & ":A" & i * 37 + 37).Copy wählt pro Schleifendurchlauf immer einen 37er Block aus: Beim ersten Durchlauf (i=0) die ersten 37 Zeilen. Zweiten Durchl. (I=1) die Zeilen 38-74. (A 0*37+1:A 0*37+37) ergibt: (A1:A37) (A 1*37+1:A1*37+37) ergibt: (A38:A74) usw.. Mit dem '.Copy' dahinter wird dieser Block kopiert. Ich hoffe es hilft erstmal weiter Gruss Andreas Antwort 8 von Kauz vom 24.03.2007, 02:49 Hallo Jan.... Nachtrag: Betrifft Zeile 'For i = 0 To Anzahl' Setze für die Variable Anzahl mal eine feste Zahl ein: z.B. 'For i = 0 To 5' das sind dann 6 Durchläufe, also 6 mal 37 Zeilen die umkopiert werden. Wenn es jetzt geht, so wird es an den ersten beiden Zeilen liegen: 'letztezeile = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)' 'Anzahl = Int(letztezeile / 37)' Dann vielleicht im Vb-Editor mal unter debuggen im Einzelsatz ausführen bis zum Schleifenanfang. Nun mit dem Cursor auf 'letztezeile' und 'Anzahl' gehen, um zu sehen, was sie für einen Inhalt haben. Vielleicht hilft das ja weiter... Gruss Andreas Antwort 9 von JaO1000 vom 26.03.2007, 09:01 Hallo Andreas, vielen Dank erstmal für deine tollen Erläuterungen: Wenn man die "Range"-Syntax erklärt bekommt, ist es wirklich einfach. Du hattest Recht! Wenn ich 'For i = 0 To Anzahl' z.B. durch 'For i = 0 To 5' ersetze, funktioniert der Durchlauf. Das Debuggen im VB-Editor habe ich auch ausprobiert, allerdings weiß ich nicht ganz, ob ich wirklich gedebuggt habe. D.h. die Zeilen im Editor waren gelb markiert, wenn ich den Code in Einzelschritten durchgegangen bin. Allerdings hat sich am Code selbst nichts geändert. Wie gehe ich nun weiter vor, um das Makro selbstständig bis in die letzte Zeile (max. 256^2 = 65536) durchlaufen zu lassen? Hast du bzw. habt ihr einen Tipp? Vielen Dank Jan Antworten der Gruppe: Tabellenkalkulation
|
07121 07122 07123 07124 07125 07126 07127 07128 |