Comment regrouper les données de plusieurs colonnes Excel en 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.
Quelle est la façon la plus efficace de l'obtenir pour que toutes ces données soient regroupées en une seule colonne (c. - à-d. 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 mettre en œuvre cette solution. Ce que je veux dire, c'est que, si votre solution n'est pas une "formule" mais VBA, Comment puis-je mettre en œuvre cette la solution?
Merci!
6 réponses
enregistrez votre cahier d'exercices. Si ce code ne fait pas ce que vous voulez, la seule façon de revenir en arrière est de fermer sans sauvegarder et rouvrir.
sélectionnez les données que vous voulez énumérer dans une colonne. Doivent être des colonnes contiguës. Peut contenir des cellules vides.
Appuyez sur Alt+F11 pour ouvrir le VBE
Press Control+R pour voir L'Explorateur de projet
naviguez vers le projet pour votre cahier d'exercices et choisissez Insert-Module
Coller ce code dans le code volet
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
meilleure solution Simple à suivre:
sélectionnez l'intervalle des colonnes que vous voulez copier dans une seule colonne
copier la gamme des cellules (colonnes multiples)
Ouvrir Notepad++
coller la gamme choisie de cellules
appuyez sur Ctrl+H, remplacez \t par \n et cliquez sur Remplacer tout
toutes les colonnes multiples entrent dans une seule colonne
maintenant copier la même chose et coller dans excel
Simple et une solution efficace pour ceux qui ne veulent pas perdre de temps à coder en VBA
Voici comment vous faites avec quelques formules Excel simples, et aucune Fantaisie VBA nécessaire. Le truc est d'utiliser la formule OFFSET. S'il vous plaît voir cet exemple de tableur:
vous n'avez pas mentionné si vous utilisez Excel 2003 ou 2007, mais vous pourriez rencontrer un problème avec le nombre de lignes dans Excel 2003 plafonné à 65 536. Si vous utilisez 2007, la limite est de 1 048 576.
R.il existe une variété d'options pour connecter R à Excel, y compris
peu importe 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'aime l' melt()
fonction de transformer paquet. Ce code pourrait ressembler à:
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)
A partir de là, vous pouvez effectuer n'importe quel nombre d'opérations statistiques ou graphiques. Si vous utilisez le plugin RExcel ci-dessus, vous pouvez activer tout cela et l'exécuter dans Excel lui-même. La communauté R est très active et peut vous aider à répondre à toutes les questions que vous pourriez rencontrer.
Bonne chance!
regardez Blockspring - vous avez besoin d'installer le plugin, mais alors c'est juste une autre fonction que vous appelez comme ça:
=BLOCKSPRING("twodee-array-reduce","input_array",D5:F7)
le code source et les autres détails sont ici.
Si cela ne convient pas et/ou vous souhaitez construire ma solution, vous pouvez fork
ma fonction (Python) ou utiliser un autre langage de script pris en charge (Ruby
, R
,JS
, etc...).
La formule
=OFFSET(Sheet1!$A,MOD(ROW()-1,COUNT(Sheet1!$A:$A000)),
(ROW()-1)/COUNT(Sheet1!$A:$A000))
placé dans chaque cellule de votre second cahier récupérera la cellule appropriée de la feuille source. Pas de macros, simple copie d'une feuille à l'autre pour reformater les résultats.
vous devrez modifier les plages dans la fonction COUNT pour correspondre au nombre maximum de lignes dans la feuille source. Ajuster au besoin les en-têtes de colonne.
si vous avez besoin de quelque chose d'autre qu'un 0 pour les cellules vides, vous pouvez préférer inclure un conditionnel.
un script pour reformater les données peut bien être plus efficace, mais 20K rows n'est plus une limite réelle dans un classeur Excel moderne.