Mise à jour automatique des colonnes

1

J'ai suivi deux colonnes Excel. Ils ont une relation parent-enfant. Par exemple, si la valeur de la cellule D de la ligne 1 est 1000000000, il peut s'agir d'un parent d'une ligne différente.

Ce que j'essaie de faire est d'avoir une feuille Excel avec 1000 lignes. La structure d'identification que j'ai reçue est incorrecte. J'essaie de commencer le nouvel ID à partir de 1 et d'incrémenter à 10 pour que le prochain ID soit 10. Donc, avec ce modèle, je veux remplacer les nouveaux ID existants à partir de 1, puis mettre à jour la colonne New ParentID avec le NewID mis à jour.

J'essayais d'écrire une formule pour y parvenir mais je suis très nouveau pour exceller. Est-ce que cela devrait être fait avec une macro? Aucune suggestion?

Exemple de données actuelles

 D           E
New ID      New Parent ID
1000000000  0
1100000000  1000000000
1100000001  1100000000
1100000002  1100000000
1100000003  1100000000
1100000004  1100000000
1100000005  1100000000
1100000006  1100000000
1100000007  1100000000
1200000000  1000000000
1200000001  1200000000
1200000002  1200000000
1200000003  1200000000
1200000004  1200000000
1200000005  1200000000
1200000006  1200000000
1200000007  1200000000
1200000008  1200000000
1200000009  1200000000
1200000010  1200000000
1200000011  1200000000
1200000012  1200000000
2000000000  0
2000000001  2000000000
2000000002  2000000000
3000000000  0
3100000000  3000000000
3100000001  3100000000
3100000002  3100000000
3100000003  3100000000
3100000004  3100000000

Nouvel exemple de données Notez le nouveau modèle. Donc, le nouvel ID 1000000000 a été remplacé par 1 et où 1000000000 étaient utilisés dans la colonne NewParentID, ils ont également été remplacés par 1. Et ainsi de suite. Je pouvais donc créer facilement les valeurs incrémentielles dans le NewID. deuxième colonne avec le bon identifiant.

   New ID   New Parent ID
    1             0
    10            1
    1100000001    10
    1100000002    10
    1100000003    10
    1100000004    10
    1100000005    10
    1100000006    10
    1100000007    10
tam tam
la source
Eh bien, peut-être que je suis trop bête. Mais je ne comprends pas. À quoi ressemblent vos données actuelles et à quoi devraient-elles ressembler après? Peut-être qu'un exemple de cahier de travail serait un bon moyen de le montrer.
Nixda
Je suis désolé, j'ai mis à jour la question avec les données de sortie souhaitées. Je vais aussi poster le cahier de travail
tam tam

Réponses:

2

Pour un nouvel utilisateur d'Excel, je resterais loin de VBA sauf si nécessaire. Si je comprends bien votre question, vous ne pouvez la résoudre qu'avec des formules. J'ai essayé de les rendre aussi simples que possible.

Premièrement, je conserverais le jeu de données d'origine en travaillant sur une image des données source. C'est utile à des fins d'audit et cela peut vous aider à mieux comprendre son fonctionnement. Les colonnes ressembleraient à ceci:

ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
-------------------------------------------------- -
1000000000 | 0 | |
1100000000 | 1000000000 | |
1100000001 | 1100000000 | |
1200000000 | 1000000000 | |
1200000001 | 1200000000 | |
1200000002 | 1200000000 | |

(Pour tous les exemples, j'utiliserai le même ensemble de données réduit. La première colonne est la colonne A, les en-têtes de colonne sont à la ligne 1.)

Nous attribuerons un nouvel identifiant à l'élément enfant dans la colonne Nouvel identifiant et son identifiant parent sera automatiquement évalué dans la colonne Nouvel identifiant parent.

ID tapés

Pour l'instant, il suffit de copier-coller les valeurs d'identifiant dans la colonne Nouvel identifiant:

ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 | 0 | 1000000000 |
1100000000 | 1000000000 | 1100000000 |
1100000001 | 1100000000 | 1100000001 |
1200000000 | 1000000000 | 1200000000 |
1200000001 | 1200000000 | 1200000001 |
1200000002 | 1200000000 | 1200000002 |

Puis dans la première cellule de l'ID nouveau parent, entrez la formule suivante: =VLOOKUP($B2,$A:$C,3,FALSE). Cette formule permet à Excel de regarder verticalement. Il se lit comme suit: "Recherchez la valeur de la cellule B2 (ID parent) dans la colonne A (colonne ID) et, lorsque vous trouvez une correspondance exacte, renvoyez la valeur dans la troisième colonne (colonne C, Nouveaux ID)".

Compte tenu de la disposition de nos données, cela signifie réellement "recherchez l'ID parent dans la colonne ID et, lorsque vous trouvez une correspondance exacte, renvoyez son nouvel ID". À l'heure actuelle, les nouveaux identifiants sont identiques à l'identifiant d'origine, nous nous en occuperons plus tard. Si vous avez besoin d'explications supplémentaires sur l'utilisation de fonctions (comme VLOOKUP) dans les formules, cliquez sur le fxbouton situé en regard de la barre de formule, puis sur le lien d'aide "Aide supplémentaire sur cette fonction".

Dès que vous tapez Entrée, la formule sera remplacée par son résultat et, dans ce cas, la valeur de l'erreur #N/A. Cela est dû au fait que le premier ID parent ne peut pas être trouvé dans la colonne ID. Ceci est logique puisque le plus haut parent n'a, par définition, aucun parent.

Pour traiter ce cas, nous allons mettre à jour notre formule =IF($B2=0,0,VLOOKUP($B2,$A:$C,3,FALSE)). Il se lit "si la valeur de la cellule B2 est 0, puis renvoie 0, sinon recherchez [...]" ou "si l'ID parent est 0, puis renvoie 0, sinon recherchez son nouvel ID".

Il est temps d'appliquer cette formule à l'ensemble de la colonne, ce que vous pouvez faire en un simple copier-coller:

ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 | 0 | 1000000000 | 0
1100000000 | 1000000000 | 1100000000 | 1000000000
1100000001 | 1100000000 | 1100000001 | 1100000000
1200000000 | 1000000000 | 1200000000 | 1000000000
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000

C'est là que la magie opère

Remplacez maintenant un nouvel identifiant. Comme dans votre exemple, remplacez 1000000000par 1. Vous verrez immédiatement les mises à jour du nouvel ID parent avec le nouvel identifiant. Rejouer et remplacer 1100000000par 10:

ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 | 0 | 1 | 0
1100000000 | 1000000000 | 10 | 1
1100000001 | 1100000000 | 1100000001 | dix
1200000000 | 1000000000 | 1200000000 | 1
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000

C'était amusant! Mais le faire mille fois, non merci, non?

Identifiants automatiques

C'est là que brille Excel, car une fois que vous avez réfléchi, il fera tout le travail. Dans la cellule C4, type dans cette formule: =C3+10. Celui-ci ajoute dix à la valeur dans la cellule C3, la cellule juste au-dessus, incrémentant effectivement le nouvel identifiant de dix. Copiez-collez-le jusqu'à la fin de la colonne et vous êtes tous ensemble:

ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 0 1 0
1100000000 1000000000 | 10 | 1
1100000001 1100000000 | 20 | dix
1200000000 1000000000 | 30 | 1
1200000001 1200000000 | 40 | 30
1200000002 1200000000 | 50 | 30

Copier-coller des formules

Un dernier mot de prudence. Je suppose que vous utiliserez les nouveaux identifiants et les nouveaux identifiants de parent, éventuellement dans d'autres classeurs. Dans ce cas, vous souhaiterez probablement faire un collage spécial , pour ne conserver que la valeur, pas la formule.

Supposons qu'une fois que vous avez terminé, vous souhaitez supprimer les colonnes ID d'origine et ID parent. Avant de le faire, copiez les colonnes Nouvel ID et Nouvel ID Parent comme vous le faites habituellement. Ensuite, au lieu de coller, utilisez la special pastecommande et choisissez Valeurs, puis cliquez sur OK. La special pastecommande est disponible avec un clic droit sur la destination, entre autres lieux.

raph82
la source
0

Vous pouvez faire cela avec une macro, tout ce que vous voulez, c'est créer un grand nombre de données répétitives. Personnellement, j'évite les macros et je fais l'essentiel de ma génération de texte dans Powershell.

Maintenant, si vous voulez prendre des données et faire des calculs, nous pouvons le faire avec des formules. Voici ceux dont je pense avoir besoin:

  • = IF (condition, valeur vraie, valeur fausse) - Tests logiques pour prendre des décisions.
  • = MOD (cellule de données, diviseur) - Retourne le reste après une division.
  • = MROUND (Data Cell, Multiple) - Arrondit au multiple de nombre défini le plus proche.

Lorsque nous travaillons avec des formules, nous devons exposer notre logique pour les actions que nous voulons entreprendre dans l’ordre. Toutes les formules sont de nature procédurale, ce qui nous aide à comprendre ce que nous devons faire en premier. Je suppose que toutes les entrées sont dans la colonne "Nouvel ID" et que toutes les sorties (ou retours) se trouvent dans la colonne ID parent. En regardant votre exemple de données, voici ce que je pense que vous voulez.

  1. Recherchez les ID qui sont des facteurs de "1000000000" (10 ^ 9) et renvoyez un 0.
  2. Recherchez les ID correspondant à "100000000" (10 ^ 8) et arrondissez à un nombre entier égal à "1000000000" (10 ^ 9).
  3. Arrondir les ID restants à un nombre entier qui est un facteur de "100000000" (10 ^ 8)

Il y a beaucoup de chiffres à comprendre, voici donc un exemple de chaque étape.

  • Étape 1: 700000000 renvoie 0
  • Étape 2: 770000000 renvoie 700000000
  • Étape 3: 770000007 renvoie 770000000

Si cela est correct, configurons vos fonctions:

Étape 1

La première équation que nous utilisons est l’équation "MOD". Si nous divisons chaque nombre par "1000000000" (10 ^ 9), nous pouvons rechercher n’importe quel nombre avec un reste de zéro. Nous trouvons que chacun veut renvoyer un zéro avec. Pour ce faire, nous devons utiliser la formule "SI". Voici à quoi ressemblerait votre formule dans la cellule E2:

=IF(MOD(D2,1000000000)=0,0,"false")

Ce premier paramètre IF teste si le nombre dans D2 a un reste lorsqu'il est divisé par 10 ^ 9. Si ce n'est pas le cas, renvoyer un zéro, sinon renvoyer le texte "false"

Étape 2

Maintenant que nous avons géré notre premier groupe de nombres, nous pouvons ajouter une instruction IF au mélange pour chaîner la logique ensemble. Nous avons maintenant besoin de l’équation "FLOOR" pour arrondir un nombre en chiffres significatifs. Dans ce cas, huit chiffres. Voici à quoi ressemblerait la formule seule:

=IF(MOD(D2,10000000)=0,MROUND(D2,1000000000),"false")

Ensuite, nous devons l’enchaîner dans la formule de l’étape 1. Remplacer le "faux" de l’étape 1 par la formule de l’étape 2.

Étape 3

Enfin, il suffit d'arrondir les chiffres restants. Nous pouvons le faire avec un autre MROUND. Voici la formule seule:

=MROUND(D2,100000000)

Et maintenant, le tout enchaîné:

=IF(MOD(D2,1000000000)=0,0,IF(MOD(D2,10000000)=0,MROUND(D2,1000000000),MROUND(D2,100000000)))

Essayez et j'espère que cela fonctionne. Lorsque j'exécute cette formule avec vos données dans la colonne D, je reçois les mêmes chiffres que dans la colonne E.

Doltknuckle
la source