-1
votes

Déplacement toutes les 5 cellules vers une nouvelle colonne

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?


3 commentaires

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)


4 Réponses :


0
votes

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)


0 commentaires

1
votes

Cela transformerait la première colonne par bloc en colonnes de 5 lignes chacune:

entrez la description de l'image ici

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

entrez la description de l'image ici


0 commentaires

0
votes
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

1 commentaires

Notez que les variables de comptage de lignes doivent être de type Long not Double !



0
votes

..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


0 commentaires