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
la source
Réponses:
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:
(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:
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 lefx
bouton 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:
C'est là que la magie opère
Remplacez maintenant un nouvel identifiant. Comme dans votre exemple, remplacez
1000000000
par1
. Vous verrez immédiatement les mises à jour du nouvel ID parent avec le nouvel identifiant. Rejouer et remplacer1100000000
par10
: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: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 paste
commande et choisissez Valeurs, puis cliquez sur OK. Laspecial paste
commande est disponible avec un clic droit sur la destination, entre autres lieux.la source
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:
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.
Il y a beaucoup de chiffres à comprendre, voici donc un exemple de chaque étape.
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.
la source