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!
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
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
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:
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.
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:
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!
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 ...).