Conversion de CSV en lignes et non en colonnes

0

J'ai un fichier avec des références uniques dans la colonne A (par exemple, des noms de sociétés) et une ou plusieurs valeurs renvoyées liées à cette valeur unique dans la colonne B (par exemple, des comptes). Celles-ci sont séparées par des virgules, certaines sociétés n’ont qu’un seul compte, d’autres en ont plusieurs. En utilisant "texte en colonnes", j'obtiens ensuite tous les numéros de compte dans des colonnes séparées situées sur la même ligne que le nom de la société.

Ce que je voudrais plutôt faire, c’est d’obtenir chaque numéro de compte sur une nouvelle ligne, chacun avec le nom de la société correspondante; j’ai alors une feuille de 2 colonnes de largeur pouvant être consultée au niveau du compte individuel tout en renvoyant à la bonne entreprise. Est-ce possible?

Jonnie B
la source
1
Salut! Vous dites que la colonne A du fichier CSV contient des références uniques, mais vous semblez également indiquer qu'une société peut avoir plusieurs comptes, chacun avec un nom de société, ce qui dans mon esprit est en conflit. :) Pouvez-vous poster certaines des lignes du fichier CSV montrant à la fois à quoi ressemble une entreprise avec un compte unique, ainsi qu’une entreprise avec plusieurs comptes?
cʜιᴇ007
Désolé, pour clarifier, disons que j'ai 3 sociétés appelées A, B et C, la société A a le numéro de compte A123 uniquement, la société B a 2 comptes, A543 et A765 et la société C a 3 comptes, A933, A403 et A221. Ce sont toutes des valeurs uniques (la duplication des numéros de compte et des entreprises est impossible dans ce système). Puis-je l'obtenir de sorte qu'il y ait 6 lignes chacune avec les 6 comptes individuels et la société correspondante?
Jonnie B
Ce n’est pas une réponse Excel, je vais donc l’ajouter sous forme de commentaire, mais lorsque je suis confronté à ce genre de choses, j’écris un petit script Perl pour transformer le csv sous la forme que je veux, donc quelque chose qui prend "A, A123; B, A543, A765; C, A933, A403, A221" (; signifiant fin de ligne) et crache "A, A123; B, A543; B, A765; C, A933; C, A403; C, A221 ", que vous pouvez ensuite importer dans Excel.
Blm

Réponses:

0

Vous pouvez utiliser des formules Excel pour délimiter "manuellement" vos données. Si vous utilisez cette formule, la première occurrence d'une virgule sera trouvée, puis ajustée à cette occurrence:

=IF(A1="","",IFERROR(MID(A1,1,FIND(",",A1)-1),A1))

Sous la cellule où se trouvent nos données initiales (dans notre cas, A1 correspond à nos données initiales), nous devons indexer les données pour ne pas inclure ce que nous venons de supprimer:

=MID(A1,LEN(B1)+2,LEN(A1))

Voici tout cela fonctionne ensemble:

entrez la description de l'image ici

Eric F
la source
Je ne comprends pas la question ou votre réponse (ou les deux :-)). Où se trouve le nom de la société et comment fonctionnerait-il avec plusieurs sociétés (comme l'exemple ajouté par @JonnieB après que vous ayez posté cette réponse)?
Blm
@blm Son article original traitait de l'utilisation de la fonctionnalité "texte en colonnes" pour séparer ses données en rangées. Il a ensuite changé de question après avoir posté cela, de sorte que je ne sais plus trop ce qu'il cherche.
Eric F
Salut les gars, désolé si je n'ai pas été clair. Lorsque j'ai mentionné «texte en colonnes», il s'agissait simplement de référencer une fonction qui fait quelque chose de similaire à ce que je veux, mais pas exactement. Je veux être capable de prendre les données suivantes
Jonnie B
Colonne A, mes entreprises: (dans la cellule A1) Verizon, (A2) Vodafone, (A3) Telefonica
Jonnie B
Colonne B, les comptes qu'ils ont: (dans la cellule B1 - indiquant les numéros de compte de Verizon) 123456,234567, (B2) 345678, (B3) 987654,876543,765432
Jonnie B
0

@Jonnie, si vous utilisiez TextToColumns pour répartir les numéros de compte sur différentes colonnes. Ensuite, allez dans le menu 'Écran' et cliquez sur l'icône au dessus de Macro à droite. Entrez un nom pour la macro et cliquez sur 'créer'. Ensuite, collez le code ci-dessous entre les deux lignes avec sub. Fermez la fenêtre VBA pour revenir à vos données. Cliquez n'importe où dans les données. Cliquez à nouveau sur l'icône de la macro, choisissez votre macroname et cliquez sur Exécuter.

Dim data As Range
Dim i As Integer
Dim j As Integer

Set data = ActiveCell.CurrentRegion 'Selecting the active region

For i = data.Rows.Count To 1 Step -1 'for all row (start at bottom)
    For j = 3 To data.Columns.Count 'for all columns (start at third column)
        If Not IsEmpty(data(i, j)) Then 'if there is a value
            data.Rows(i + 1).Insert 'insert a new row below
            data(i + 1, 1) = data(i, 1) 'copy the company
            data(i + 1, 2) = data(i, j) 'copy the account number
            data(i, j).Clear 'delete the original value
        End If
    Next j
Next i

Cela devrait donner une liste de

company A; accno 1
company A; accno 2
company B; accno 3
company C; accno 4
Joost
la source
Joost, merci pour cela, mais je n'ai pas encore écrit VBA / macros, donc je ne sais pas quels bits substituer les valeurs de mes colonnes / lignes, etc., ni comment "exécuter" la macro. Le résultat que vous fournissez est ce que je recherche après. Pourriez-vous le décomposer en excel-moron parler pour moi, s'il vous plaît (par exemple, appuyez sur alt + F11 pour ouvrir le VBA, puis sélectionnez la feuille que vous travaillez dans le projet VBA, etc.)?
Jonnie B
@JonnieB J'ai modifié ma réponse pour expliquer le processus. Désolé si je n'ai pas bien compris le libellé, je suis sur une version néerlandaise d'Excel 2016.
Joost