Makro ausführen | Daten auf Spalten verteilen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Chris.Z
Beiträge: 3
Registriert: Di, 11.10.2016 14:53

Makro ausführen | Daten auf Spalten verteilen

Beitrag von Chris.Z »

Hi,

habe ein Makro für Excel gefunden das Daten, die in einer Spalte unter einander angeordnet sind, auf Tabellenspalten verteilt.
http://home.arcor.de/excelseite/KleineH ... nspon.html
In meinem Fall habe ich eine Spalte mit ca. 100 Namen.
Ich muss diese Namen jeweils in 3er Gruppen in einer Zeile Darstellen,

Also von:

Name 1
Name 2
Name 3
Name 4
Name 5
Name 6
.
.

zu:

Name 1 | Name 2 | Name 3
Name 4 | Name 5 | Name 6
...

Hier das Makro das ich gefunden habe:

Code: Alles auswählen

Option Explicit
Sub transponieren()
' Klaus-Dieter Oppermann Januar 2004
' Variablen deklarieren
Dim arr(50000, 8)                           ' Felder für Array
Dim sp As Integer                           ' Zähler für Array-Felder
Dim s As Integer                            ' Schleifenzähler für Zeilen
Dim ze As Long                              ' Zähler für Array-Felder
ze = 1                                      ' Startwert setzen
sp = 1                                      ' Startwert setzen
' Werte in Array einlesen
For s = 1 To Range("A65536").End(xlUp).Row  ' Schleife zum Einlesen der Werte
    arr(ze, sp) = Cells(s, 1)               ' Wert in Array
    sp = sp + 1                             ' Zähler plus 1
        If sp = 8 Then                      ' wenn 4. Zeile erreicht dann ...
            ze = ze + 1                     ' ... Zähler plus 1
            sp = 1                          ' ... Zähler zurücksetzen
        End If                              ' Ende Bedingung
Next s                                      ' Schleifenzähler plus 1
' Werte in Tabelle schreiben
Range("B2:H500") = arr                      ' Array in Range (Bereich) übertragen
End Sub
Habe den Code geändert um nur 3 Spalten zu bekommen:

Code: Alles auswählen

Option Explicit
Sub transponieren()
' Klaus-Dieter Oppermann Januar 2004
' Variablen deklarieren
Dim arr(200, 4)                           ' Felder für Array
Dim sp As Integer                           ' Zähler für Array-Felder
Dim s As Integer                            ' Schleifenzähler für Zeilen
Dim ze As Long                              ' Zähler für Array-Felder
ze = 1                                      ' Startwert setzen
sp = 1                                      ' Startwert setzen
' Werte in Array einlesen
For s = 1 To Range("A238").End(xlUp).Row  ' Schleife zum Einlesen der Werte
    arr(ze, sp) = Cells(s, 1)               ' Wert in Array
    sp = sp + 1                             ' Zähler plus 1
        If sp = 4 Then                      ' wenn 8. Zeile erreicht dann ...
            ze = ze + 1                     ' ... Zähler plus 1
            sp = 1                          ' ... Zähler zurücksetzen
        End If                              ' Ende Bedingung
Next s                                      ' Schleifenzähler plus 1
' Werte in Tabelle schreiben
Range("B2:D500") = arr                      ' Array in Range (Bereich) übertragen
End Sub
Wenn ich den Code unter "Extras" - "Makros" - "Makros verwalten" - "OpenOffice.org Basic" einfüge, die erste Zeile in der Tabelle auswähle und dann ausführe bekomme ich die Fehlermeldung:
"Basic-Laufzeitfehler. Sub- oder Function-Prozedur nicht definiert"

Ich bin Motion Grafiker und habe keine Ahnung von OpenOffice und Programmieren.
Könnte mir bitte jemand in ein paar simplen Schritten erklären wie ich dieses Makro richtigstellen und auf meine Tabelle anwenden kann.

Vielen Dank,
cheers,
Chris
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Makro ausführen | Daten auf Spalten verteilen

Beitrag von F3K Total »

Hi,
dafür braucht man kein Makro, das geht mit den in Calc eingebauten Funktionen Verschiebung(), Spalte() und Zeile().
Angenommen deine Namen beginnen in Zelle A2, in A1 hast du die Spaltenüberschrift, dann schreibe in Zelle B2 diese Formel:

Code: Alles auswählen

=VERSCHIEBUNG($A$1;((SPALTE()-2))+(ZEILE()-2)*3+1;0)
und ziehe sie erst noch zwei Felder nach rechts, dann soweit nach unten, bis alle Namen aufgeteilt sind. Ergebnis:

Code: Alles auswählen

NAMEN  |N1     |N2     |N3
Name 1 |Name 1 |Name 2 |Name 3 
Name 2 |Name 4 |Name 5 |Name 6 
Name 3 |Name 7 |Name 8 |Name 9 
Name 4 |Name 10|Name 11|Name 12
Name 5 |Name 13|Name 14|Name 15
Name 6 |Name 16|Name 17|Name 18
Name 7 |Name 19|Name 20|Name 21
Name 8 |
Name 9 |
Name 10|
Name 11|
Name 12|
Name 13|
Name 14|
Name 15|
Name 16|
Name 17|
Name 18|
Name 19|
Name 20|
Name 21|
Gruß R
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Makro ausführen | Daten auf Spalten verteilen

Beitrag von F3K Total »

Jo, kann ich:
  • Die Zelle B2 befindet sich in Spalte 2, Zeile 2
  • Die Funktion Spalte() gibt daher in Zelle B2 eine 2 zurück, die Funktion Zeile () gibt in Zelle B2 auch eine 2 zurück
  • Eingesetzt in die Formel steht dann da

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;((2-2))+(2-2)*3+1;0)
    oder ausgerechnet

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;1;0)
    was, wenn die Formel in B2 steht, soviel bedeutet wie: Verschiebe in Zelle B2, ausgehend von A1, den Inhalt der Zelle, die 1 Zeile unter A1 und 0 Spalten daneben liegt, also den Inhalt von A2 = Name1
  • Die Zelle D3 befindet sich in Spalte 4, Zeile 3
  • Die Funktion Spalte() gibt daher in Zelle D3 eine 4 zurück, die Funktion Zeile () gibt in Zelle D3 eine 3 zurück
  • Eingesetzt in die Formel steht dann da

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;((4-2))+(3-2)*3+1;0)
    oder ausgerechnet

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;6;0)
    was, wenn die Formel in D3 steht, soviel bedeutet wie: Verschiebe in Zelle D3, ausgehend von A1, den Inhalt der Zelle, die 6 Zeilen unter A1 und 0 Spalten daneben liegt, also den Inhalt von A7 = Name6
Oder kurz, gehe pro Spalte einen nach unten, pro Zeile aber drei.
Klar soweit?
Gruß R
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: Makro ausführen | Daten auf Spalten verteilen

Beitrag von Karolus »

Hallo

Vielleicht auch:

Code: Alles auswählen

=MTRANS(VERSCHIEBUNG($A$1;(ZEILE()-1)*3;0;3;1))
als Matrixformel mit <strg>+<shift>+<enter> bestätigien und mit gedrückter <stg>taste nach unten ziehen.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Chris.Z
Beiträge: 3
Registriert: Di, 11.10.2016 14:53

Re: Makro ausführen | Daten auf Spalten verteilen

Beitrag von Chris.Z »

Hi,

wow, vielen Dank für die ausführliche Erklärung!
Muss die Funktion nämlich für 2-4 Namen pro Zeile adaptieren, sollte jetzt kein Problem mehr sein.

Schönen Tag noch,
Danke,
cheers,
Chris

F3K Total hat geschrieben:Jo, kann ich:
  • Die Zelle B2 befindet sich in Spalte 2, Zeile 2
  • Die Funktion Spalte() gibt daher in Zelle B2 eine 2 zurück, die Funktion Zeile () gibt in Zelle B2 auch eine 2 zurück
  • Eingesetzt in die Formel steht dann da

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;((2-2))+(2-2)*3+1;0)
    oder ausgerechnet

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;1;0)
    was, wenn die Formel in B2 steht, soviel bedeutet wie: Verschiebe in Zelle B2, ausgehend von A1, den Inhalt der Zelle, die 1 Zeile unter A1 und 0 Spalten daneben liegt, also den Inhalt von A2 = Name1
  • Die Zelle D3 befindet sich in Spalte 4, Zeile 3
  • Die Funktion Spalte() gibt daher in Zelle D3 eine 4 zurück, die Funktion Zeile () gibt in Zelle D3 eine 3 zurück
  • Eingesetzt in die Formel steht dann da

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;((4-2))+(3-2)*3+1;0)
    oder ausgerechnet

    Code: Alles auswählen

    =VERSCHIEBUNG($A$1;6;0)
    was, wenn die Formel in D3 steht, soviel bedeutet wie: Verschiebe in Zelle D3, ausgehend von A1, den Inhalt der Zelle, die 6 Zeilen unter A1 und 0 Spalten daneben liegt, also den Inhalt von A7 = Name6
Oder kurz, gehe pro Spalte einen nach unten, pro Zeile aber drei.
Klar soweit?
Gruß R
Chris.Z
Beiträge: 3
Registriert: Di, 11.10.2016 14:53

Re: Makro ausführen | Daten auf Spalten verteilen

Beitrag von Chris.Z »

Hi,

danke für deinen Input!

Werde ich auch mal ausprobieren,

thx,
cheers,
Chris
Karolus hat geschrieben:Hallo

Vielleicht auch:

Code: Alles auswählen

=MTRANS(VERSCHIEBUNG($A$1;(ZEILE()-1)*3;0;3;1))
als Matrixformel mit <strg>+<shift>+<enter> bestätigien und mit gedrückter <stg>taste nach unten ziehen.
Antworten