web-dev-qa-db-fra.com

Comment consolider les données de plusieurs colonnes Excel dans une seule colonne

Disons que j'ai une feuille Excel avec 4 colonnes de données et 20 000 lignes de données dans chaque colonne.

Quel est le moyen le plus efficace de l'obtenir afin que toutes mes données soient consolidées dans une colonne (I.E. - 80 000 lignes de données dans la colonne A au lieu de 20 000 lignes de données réparties sur 4 colonnes).

Aussi, comment implémenter cette solution. Ce que je veux dire, c'est si votre solution n'est pas une "formule" mais VBA, comment puis-je l'implémenter?

Merci!

13
Learning

Enregistrez votre classeur. Si ce code ne fait pas ce que vous voulez, le seul moyen de revenir en arrière est de fermer sans sauvegarder et de rouvrir.

Sélectionnez les données que vous souhaitez répertorier dans une colonne. Doit être des colonnes contiguës. Peut contenir des cellules vides.

Appuyez sur Alt + F11 pour ouvrir le VBE.

Appuyez sur Ctrl + R pour afficher l'explorateur de projet.

Accédez au projet de votre classeur et choisissez Insertion - Module.

Collez ce code dans le volet de code

Sub MakeOneColumn()

    Dim vaCells As Variant
    Dim vOutput() As Variant
    Dim i As Long, j As Long
    Dim lRow As Long

    If TypeName(Selection) = "Range" Then
        If Selection.Count > 1 Then
            If Selection.Count <= Selection.Parent.Rows.Count Then
                vaCells = Selection.Value

                ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1)

                For j = LBound(vaCells, 2) To UBound(vaCells, 2)
                    For i = LBound(vaCells, 1) To UBound(vaCells, 1)
                        If Len(vaCells(i, j)) > 0 Then
                            lRow = lRow + 1
                            vOutput(lRow, 1) = vaCells(i, j)
                        End If
                    Next i
                Next j

                Selection.ClearContents
                Selection.Cells(1).Resize(lRow).Value = vOutput
            End If
        End If
    End If

End Sub

Appuyez sur F5 pour exécuter le code

16
Dick Kusleika

Solution optimale et simple à suivre:

Sélectionnez la plage des colonnes que vous souhaitez copier dans une seule colonne

Copier la plage de cellules (plusieurs colonnes)

Ouvrez le Bloc-notes ++ 

Coller la plage de cellules sélectionnée

Appuyez sur Ctrl + H, remplacez\t par\n et cliquez sur remplacer tout

toutes les colonnes multiples tombent dans une seule colonne

maintenant copier le même et coller dans Excel

Solution simple et efficace pour ceux qui ne veulent pas perdre de temps à coder dans VBA

8
Iam_Karthikeyan

Voici comment procéder avec des formules Excel simples, sans recourir à VBA. L'astuce consiste à utiliser la formule OFFSET. Veuillez voir cet exemple de feuille de calcul:

https://docs.google.com/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c&usp=sharing#gid=0

5
Kenny LJ

La formule

=OFFSET(Sheet1!$A$1,MOD(ROW()-1,COUNT(Sheet1!$A$1:$A$20000)),
    (ROW()-1)/COUNT(Sheet1!$A$1:$A$20000))

placé dans chaque cellule de votre deuxième classeur récupérera la cellule appropriée dans la feuille source. Pas de macros, copie simple d'une feuille à une autre pour reformater les résultats.

Vous devrez modifier les plages de la fonction COUNT pour qu'elles correspondent au nombre maximal de lignes de la feuille source. Ajustez les en-têtes de colonne si nécessaire.

Si vous avez besoin d'autre chose qu'un 0 pour les cellules vides, vous pouvez préférer inclure une condition.

Un script pour reformater les données pourrait bien être plus efficace, mais 20 000 lignes ne constituent plus une limite réelle dans un classeur Excel moderne.

0
Pekka

Vous n'avez pas mentionné si vous utilisez Excel 2003 ou 2007, mais vous pouvez rencontrer un problème avec le nombre de lignes dans Excel 2003 limité à 65 536. Si vous utilisez 2007, la limite est fixée à 1 048 576. 

Aussi, puis-je vous demander quel est votre objectif final pour votre analyse? Si vous devez effectuer de nombreux calculs statistiques sur vos données, je vous recommande de quitter l'environnement Excel pour un logiciel plus directement adapté à la manipulation et à l'analyse des données, tel que R .

Il existe diverses options pour connecter R à Excel, notamment:

  1. RExcel
  2. RODBC
  3. Autres options du manuel R

Indépendamment de ce que vous choisissez d'utiliser pour déplacer des données dans/hors de R, le code pour passer du format large au format long est assez trivial. J'apprécie la fonction melt() du paquet reshape . Ce code ressemblerait à ceci:

library(reshape)
#Fake data, 4 columns, 20k rows
df <- data.frame(foo = rnorm(20000)
    , bar = rlnorm(20000)
    , fee = rnorm(20000)
    , fie = rlnorm(20000)
)
#Create new object with 1 column, 80k rows
df.m <- melt(df)

À partir de là, vous pouvez effectuer un nombre illimité d’opérations statistiques ou graphiques. Si vous utilisez le plugin RExcel ci-dessus, vous pouvez lancer tout cela et l'exécuter dans Excel même. La communauté R est très active et peut aider à répondre à toutes les questions que vous pourriez rencontrer.

Bonne chance!

0
Chase

Jetez un coup d'œil à Blockspring - vous devez installer le plug-in, mais il ne s'agit que d'une autre fonction que vous appelez comme ceci:

=BLOCKSPRING("twodee-array-reduce","input_array",D5:F7)

Le code source et d’autres détails sont ici . Si cela ne vous convient pas et/ou si vous souhaitez utiliser ma solution, vous pouvez fork ma fonction (Python) ou utiliser un autre langage de script pris en charge (Ruby, R, JS, etc ...).

0
Paul Karayan