2010-10-18 6 views
0

J'ai cette feuille de calcul ExcelExcel Concaténer lignes

A   B   c 
foo1  joo1  loo1 
foo1  joo2  loo2 
foo2  joo3  loo3 
foo2  joo4  loo4 
foo2  joo5  loo5 

Maintenant, je veux ce

A   B     c 
foo1  joo1, joo2   loo1, loo2 
foo2  joo3, joo4, joo5 loo3, loo4, loo5 

Comment puis-je faire, de préférence avec une interface graphique?

+0

Uff, je ne pense pas que ce soit possible tha t facilement (et il détruit aussi en quelque sorte le but des cellules de données séparées). La seule chose que je pourrais penser est de créer un makro qui fait cela pour vous. Puis-je vous demander si vous avez besoin de le faire plus souvent ou juste une fois, et dans ce cas, combien de données sont concernées? (Alors que l'on peut dire si cela vaut même l'effort) – poke

+0

juste une fois, ~ 4000 lignes, avec 1-5 doublons dans la première rangée. –

+0

Vous cherchez une solution de codage? Si c'est le cas, ajoutez des balises pour votre langage de programmation préféré (j'ai beaucoup travaillé avec les fichiers Excel en utilisant C# et NPOI). Sinon, poser votre question sur un site comme http://superuser.com/ pourrait être plus approprié. – MikeWyatt

Répondre

2

Si vous êtes prêt à écrire une macro ...

Cliquez sur la première cellule « foo1 » et exécuter ce. Il va rejoindre le foo1 puis le foo2 jusqu'à ce qu'il frappe une cellule vide. Si vous n'avez jamais écrit une macro auparavant, nous pouvons peut-être vous guider à travers.

 
Sub JoinThem() 
    ' Go until blank cell (first click at upper left of range) 
    Do While ActiveCell.Value <> "" 
     ' If this row macthes the next row 
     If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then 
     ' Join first column overwriting the values 
     ActiveCell.Offset(0, 1) = ActiveCell.Offset(0, 1).Value & ", " & ActiveCell.Offset(1, 1).Value 
     ' and Join the second column too 
     ActiveCell.Offset(0, 2) = ActiveCell.Offset(0, 2).Value & ", " & ActiveCell.Offset(1, 2).Value 
     ' Since we placed the data into one row get rid of the row 
     ActiveCell.Offset(1, 0).EntireRow.Delete 
     Else 
     ' Next row does not match, move down one 
     ActiveCell.Offset(1, 0).Select 
     End If 
    Loop 
End Sub 
+0

Salut Pete, Jamais écrit une macro avant. Cependant, à partir de l'apparence du code a fait quelque chose de similaire - Fondamentalement, j'ai appliqué un filtre unique à la première colonne, copié la deuxième colonne, supprimé les cellules copiées, enlevé le filtre, recouru à la deuxième colonne, réappliqué le filtre et ainsi de suite jusqu'à ce que je n'avais plus de cellules remplies dans la deuxième colonne. À la fin, j'avais 5 colonnes assises côte à côte - puis concaténées. Est sorti parfaitement - ce n'était pas "programmation" cependant! Merci de votre aide. –

+0

Je suis content que cela a fonctionné et vous pourriez utiliser ma réponse au moins en tant que modèle. – Pete

0

Content que vous ayez trouvé une solution. J'aurais aussi recommandé un tableau croisé dynamique. Aucun codage requis, faites simplement glisser & et déposez vos champs dans la zone Ligne. Puis laissez Excel filtrer les doublons pour vous.

0

Aussi, vous pouvez utiliser Salstat2, et les étapes suivantes,

1- importer les données en utilisant l'option ouverte dans le menu Fichier

2- Dans le panneau de script que vous devez écrire

# getting the colums 
res= group() 
res.xdata= [ grid.GetCol('A')] 
res.ydata= [ grid.GetCol('B'), grid.GetCol('C')] 
res.yvalues= ['concat(B)','concat(C)'] # concat is a function used to concatenate the data 
report.addPage() # adding a new sheet to put the results 
for lis in res.getAsRow(): 
    report.addRowData(lis) # adding the results row by row 

3- plus d'informations here

Questions connexes