Schleife für Aktivitäten wiederholung
#1
Moin zusammen,

ich bitte um Eure Hilfe:
Aus einer Online Abfrage, Verein, habe ich die Daten per CSV in Excel importiert.

Die Daten je Person sind leider alle Senkrecht = 18 Angaben
Vorname Name etc.

Die erste Angabe der ersten Person, Vorname,  steht in A6 
Alle anderen Zeilen habe ich einzeln von A7 zu B6 usw. kopiert (Von Senkrecht in Waagrecht )
Erst Kopie Select Copy Paste,  dann die entstandene leere Zeile gelöscht.
Hier benötige ich nun eine Schleife die die nächste/n Person(en) mit je 17 weiteren Datenangaben jeweils in die nächste Zeile und Zellen schreibt
von A7 bis R7 (danach xlup)
bis zum Ende der Datei 

Danke im Voraus
Antworten Top
#2
Hallo,

mit diesem Makro habe ich so etwas mal für jeweils sieben Zeilen durchgeführt. Habe das jetzt für deinen Fall angepasst, der zu transponierende Bereich muss vorher selektiert werden. Das würde ich inzwischen alles etwas anders lösen, ist halt eine Jugendsünde.

Code:
Option Explicit

Sub transponieren()
' Klaus-Dieter Oppermann Mai 2005
' Variablen deklarieren
Dim arre As Variant                             ' Array Ausgangsdaten
Dim arra() As Variant                           ' Array transponierte Daten
Dim s As Integer                                ' Schleifenzähler
Dim ss As Integer                               ' Schleifenzähler Ausgangsdaten
Dim az As Integer                               ' Schleifenzähler 1. Arrayfeld transponierte Daten
Dim sp As Integer                               ' Schleifenzähler 2. Arrayfeld transponierte Daten
' Daten einlesen
arre = Selection                                ' markierten Bereich in Array
ReDim arra(UBound(arre) / 18, 18)                 ' Dimension an Liste anpassen
' transponieren
For s = LBound(arre) To UBound(arre) / 18        ' "äußere" Schleife
    For sp = 0 To 17                            ' "innere" Schleife (Arrayfelder)
        ss = ss + 1                             ' Zähler plus 1
        arra(az, sp) = arre(ss, 1)              ' Array mit transponierten Daten füllen
    Next sp                                     ' Schleifenzähler plus 1
    If ss Mod 18 = 0 Then az = az + 1            ' wenn "Zeile" im Array gefüllt, dann Feldzähler plus 1
Next s                                          ' Schleifenzähler plus 1
Range("C3", "T" & UBound(arre) / 18 + 3) = arra  ' transponierte Daten in Tabelle schreiben
' Liste formatieren
With Columns("C:T")                             ' Bereich definieren
    .WrapText = False                           ' kein Zeilenumbruch
    .EntireColumn.AutoFit                       ' optimale Spaltenbreite
End With                                        ' Ende der Definition
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hättest du mal Excel365, wäre alles mit einer einzigen Formel zu erledigen.
Antworten Top
#4
Code:
Private Sub CommandButton1_Click()
    Dim rng, rng2(1 To 1000, 1 To 18), i, z, s
    rng = Range("A6:A1005").Value
    For i = 1 To 1000
        z = Int((i - 1) / 18) + 1
        s = ((i - 1) Mod 18) + 1
        rng2(z, s) = rng(i, 1)
    Next i
    Range("A6:R1005") = rng2
End Sub
Antworten Top
#5
Hallo,
danke werds gleich mal ausprobieren.

Danke Klaus-Dieter,

ich werd es ausprobieren.
Antworten Top
#6
Das sollte mit Power Query auch sehr einfach gehen.
Antworten Top
#7
PHP-Code:
Sub M_snb()
  For 1 To Cells(61).CurrentRegion.Rows.Count Step 18
      Cells
(18 11).Resize(, 18) = Application.Transpose(Range("A6:A23").Offset(j-1))
  Next
End Sub 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#8
Hallo,

es gibt auch die Array-Funktion "=MTRANS(Matrix)", die man in Excel-Versionen vor Excel2021 als {=MTRANS(Matrix)} eingeben muss (d.h. mit Strg+UMSCHALT+EINGABE):
1) Zielbereich markieren
2) In die Formeleditierzeile die Formel =MTRANS(Quellbereich) eingeben
3) Die Formeleingabe in 2) nicht mit EINGABE-Taste abschließen, sondern mit der Tastenkombination Strg+UMSCHALT+EINGABE
4) Darauf hin erscheint die Formel im Zielbereich mit {=MTRANS(Quellbereich)}
5) Im Zielbereich: die Formel durch Kopieren-Werte in Werte umwandeln, sodass die Array-Formel verschwindet.
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
Antworten Top


Gehe zu:


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