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!

13
demandé sur Lance Roberts 2010-12-19 00:21:19

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

16
répondu Dick Kusleika 2010-12-18 23:20:20

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

8
répondu Iam_Karthikeyan 2015-11-09 10:20:13

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:

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

5
répondu Kenny LJ 2013-02-21 18:09:36

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

  1. RExcel
  2. RODBC
  3. autres options dans le manuel R

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!

0
répondu Chase 2010-12-20 01:01:10

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

0
répondu Paul Karayan 2016-03-29 05:20:06

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.

0
répondu Pekka 2016-08-31 14:38:22