J'ai essayé de trouver une solution pour déplacer toutes les 5 cellules d'une seule colonne vers une nouvelle colonne adjacente dans Excel. Je connais https://www.extendoffice.com/documents/excel/3360-excel-transpose-every-5-rows.html mais cela ne résout pas mon problème comme je le souhaite.
Pour spécifier ce que je veux réaliser - Disons que j'ai une colonne:
1,6 2,7 3,8 4,9 5,10
Dans une feuille Excel. Je ne sais pas si cela s'appelle la cause de transposition sur toutes les solutions avec ce mot-clé, les données ont été définies différemment. Ce dont j'avais besoin, c'est:
1 2 3 4 5 6 7 8 9 10
Bien sûr, les données sur lesquelles je travaille ont beaucoup plus de lignes et devraient s'étendre sur plus de colonnes à des intervalles de 5. Un vba ou une formule simple pour y parvenir?
4 Réponses :
Donc essentiellement:
=INDEX($A:$A;ROW(A1)+COLUMN(A1)*5-5)
placé en B2 et rempli automatiquement en bas et à droite a fait l'affaire (toutes les données sont dans la colonne A)
Cela transformerait la première colonne par bloc en colonnes de 5 lignes chacune:
Option Explicit Public Sub Transform() With ThisWorkbook.Worksheets("Sheet1") Dim LastRow As Long LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row Dim iRow As Long For iRow = 6 To LastRow Step 5 .Range("A1").Offset(ColumnOffset:=(iRow - 1) / 5).Resize(RowSize:=5).Value = .Range(.Cells(iRow, "A"), .Cells(iRow + 5, "A")).Value Next iRow 'clear copied values .Range("A6", "A" & LastRow).Clear End With End Sub
Sub ColumnToColumnsSetRows() Dim rng As Range, r As Long, c As Long, rws As Long, ncl As Long Set rng = Range("A1") 'Starting range r = rng.Row 'Row of starting range c = rng.Column 'Column of starting range rws = 5 'Number of rows to use in each column ncl = 1 'Number of steps to move sideways Do Until IsEmpty(Cells(r, c).Offset(rws)) Range(Cells(r, c).Offset(rws), Cells(Rows.Count, c).End(xlUp)).Cut Cells(r, c).Offset(, ncl) c = c + ncl Loop End Sub
Notez que les variables de comptage de lignes doivent être de type Long
not Double
!
..Une alternative, puisque mon code précédent affectait le contenu des colonnes sous le résultat
Sub ColumnToColumns_SetRows() Dim rng As Range, rws As Long, c As Long, prts As Long, i As Long rws = 5 'Number of rows to use in each column Set rng = Range("A1").Resize(rws) 'Starting range c = rng.Column 'Column of starting range prts = Cells(Rows.Count, c).End(xlUp) / rws + 1 'Division in parts For i = 1 To prts rng.Offset(, i).Value = rng.Offset(rws * i).Value Next i Range(Cells(rws + 1, c), Cells(Rows.Count, c).End(xlUp)).ClearContents End Sub
Veuillez noter que, comme il ne s'agit pas d'un service d'écriture de code gratuit, il est nécessaire de montrer ce que vous avez essayé jusqu'à présent et où vous vous êtes bloqué ou des erreurs (en montrant votre code) ou du moins de montrer ce que vous avez recherché et les efforts que vous avez faits . Sinon, il nous demande simplement de faire tout le travail pour vous. Lire Comment poser des questions peut vous aider à améliorer votre question.
Supposons que les premières données se trouvent dans A1: A10 et les secondes dans B1: B5 , et qu'il n'y a plus de données dans la colonne A. Que contient C1 et que contient B6 ?
B6 en sortie doit toujours être vide car je dois remplir seulement 5 cellules et répéter en fonction du nombre de données donc C1: C5 contiendrait une autre colonne avec des données si notre excellent théorique était plus grand (avait plus de valeurs dans la colonne d'origine A)