2017-05-30 4 views
0

I disposent d'un grand ensemble de données avec des groupes de cinq ensembles de x, y, z des valeurs. Il est actuellement configuré comme une seule ligne avec chaque valeur dans sa propre cellule pour chaque intervalle au sein d'un groupe.Transposition de multiples cellules à partir de plusieurs rangées d'une seule ligne dans Excel

Example Data

enter image description here

I doivent transposer chaque valeur (x, y, z) en rangées par groupe.

Desired Format

enter image description here

La chose la plus proche que j'ai pu trouver est fonction de transposer les valeurs à une seule colonne;

=INDEX($A$2:$C$6,1+INT((ROWS(E$2:$E2)-1)/COLUMNS($A$2:$C$6)),1+MOD(ROWS(E$2:$E2)-1,COLUMNS($A$2:$C$6)))) 

Idéalement, je serais en mesure de remplir automatiquement une fonction pour créer des lignes par groupe pour l'ensemble de données. Ouvrez le script VBA ou le code R s'il y a un moyen plus simple.

+0

J'ai mis dans les images comme vous les aviez numérotées mais il me semble qu'elles sont en arrière? – teylyn

Répondre

0

Que diriez-vous de ceci. Il place les lignes transposées dans la 2ème feuille (j'ai codé en dur les noms "Sheet1" et "Sheet2" pour plus de simplicité mais veillez à les changer s'ils ne correspondent pas). En outre, j'ai codé en dur la dernière ligne #, mais si vous voulez que le code détermine la dernière rangée pour vous, vous pouvez utiliser ActiveSheet.UsedRange.Rows.Count comme décrit here.

Sub TransposeRows() 

Dim sourceRowPtr, destRowPtr, sourceColPtr, destColPtr, lastRow 

'******** 
'set this to the end 
lastRow = 500 
'******** 

sourceRowPtr = 2 
destRowPtr = 1 
sourceColPtr = 1 

While sourceRowPtr <= lastRow 
    For destColPtr = 1 To 15 
     Worksheets("Sheet2").Cells(destRowPtr, destColPtr).Value = Worksheets("Sheet1").Cells(sourceRowPtr, sourceColPtr).Value 
     sourceColPtr = sourceColPtr + 1 

     If sourceColPtr = 4 Then 
      sourceColPtr = 1 
      sourceRowPtr = sourceRowPtr + 1 
     End If 

    Next destColPtr 

    destRowPtr = destRowPtr + 1 
Wend 


End Sub