Compter les atomes dans une formule chimique (Microsoft Excel)
Ruby tente de trouver un moyen simple de déterminer le nombre d’atomes dans les formules moléculaires de certaines structures chimiques. Par exemple, une cellule peut contenir une formule telle que C12H10N6F2. Dans ce cas, le nombre d’atomes est 12 + 10 + 6 + 2 = 30. Ruby a environ 300 de ces formules à faire et se demandait s’il existe une formule Excel qui peut être utilisée pour ce faire.
Tout d’abord, la mauvaise nouvelle: il n’y a pas de moyen facile de le faire.
Là; avec cela à l’écart, nous pouvons commencer à chercher des solutions. L’exemple de formule chimique fourni par Ruby peut amener certains à penser que le comptage des atomes est un simple processus de substitution des caractères alphabétiques par quelque chose d’autre afin que seuls les caractères numériques puissent être évalués. À titre d’exemple, voici l’exemple de formule chimique de Ruby:
C12H10N6F2
Si vous remplacez les caractères alphabétiques par des signes plus, vous obtenez ceci:
+12+10+6+2
On dirait une formule simple maintenant, non? C’est trompeur, car même si cela fonctionnera dans ce cas, cela peut ne pas fonctionner du tout pour les autres formules chimiques de Ruby. Considérez la formule chimique suivante que beaucoup de gens connaissent:
H2O
Faire la même substitution rend ceci:
+2
Le problème est qu’il y a un décompte implicite de 1 chaque fois qu’il y a un seul élément – par exemple, l’élément oxygène. Ainsi, H20 est en fait 3 atomes.
Alors maintenant, nous pouvons trouver un moyen de simplement rendre compte du 1 implicite, non? Sûr; Ceci peut être fait. Cela peut être fait plus facilement et proprement avec une macro, telle que la fonction définie par l’utilisateur suivante:
Function CountAtoms(ChemForm As String) Dim sNewNum As String Dim sTemp As String Dim iNewAtoms As Integer Dim iTotalAtoms As Integer Dim J As Integer sNewNum = "" iTotalAtoms = 0 For J = 2 To Len(ChemForm) sTemp = Mid(ChemForm, J, 1) If sTemp >= "0" And sTemp <= "9" Then sNewNum = sNewNum & sTemp ElseIf sTemp <= "Z" Then iNewAtoms = Val(sNewNum) If iNewAtoms = 0 Then iNewAtoms = 1 iTotalAtoms = iTotalAtoms + iNewAtoms sNewNum = "" End If Next J iNewAtoms = Val(sNewNum) If iNewAtoms = 0 Then iNewAtoms = 1 iTotalAtoms = iTotalAtoms + iNewAtoms CountAtoms = iTotalAtoms End Function
Pour utiliser cette fonction dans votre feuille de calcul, vous référeriez simplement la formule chimique:
=CountAtoms(A1)
Si la formule chimique est dans la cellule A1, cette fonction renvoie le nombre souhaité. Il fonctionnera même avec des formules telles que les suivantes:
NaCl SbF6
Notez que ceux-ci reposent sur des noms d’éléments à deux caractères, qui sont nombreux. Cependant, il faut que le deuxième caractère d’un nom d’élément à deux caractères ne soit pas en majuscule.
Alors, cette approche fonctionnera-t-elle avec toutes les formules chimiques? Pas vraiment; cela ne fonctionne qu’avec les simples que nous avons couverts jusqu’à présent. Vous voyez, les formules chimiques peuvent devenir assez complexes. Prenons l’exemple suivant:
2H2O
Lorsqu’un nombre initial apparaît comme celui-ci, la formule doit être multipliée par cette valeur. Ainsi, au lieu des 3 atomes normaux dans H2O, cette formule aurait 6 atomes.
Ça s’empire. Considérez les formules chimiques valides suivantes:
Ca3(PO4)2 Al2(SO4)3(H2O)18
Notez les parenthèses suivies d’un nombre. Dans cette nomenclature, la valeur qui suit immédiatement la parenthèse fermante indique combien de molécules entre parenthèses se trouvent dans la plus grande molécule. Ainsi, dans le deuxième exemple, il y a 3 molécules de SO4 et 18 molécules de H2O dans la molécule globale. Cela affecte évidemment le nombre d’atomes dans la formule entière. Pour compliquer la complexité, les parenthèses peuvent même être imbriquées:
CH3(C3H4(NH2)2)18CH3
Amusant, hein?
Cela peut toujours être résolu avec une macro plus complexe. Plutôt que de réinventer la roue ici, cependant, si vous travaillez avec des formules chimiques complexes telles que celles-ci, vous voudrez peut-être envisager d’utiliser les macros fournies sur ce site:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=670
Notez que les macros ne sont pas implémentées en tant que fonctions définies par l’utilisateur. Pour les utiliser, il vous suffit de sélectionner les cellules avec les formules, d’exécuter la macro, puis les macros modifient les informations dans les colonnes à droite des formules chimiques sélectionnées. Des instructions complètes sont incluses avec le code sur le site Web ci-dessus.
Vous devez également vous assurer d’activer, dans Visual Basic Editor, les expressions régulières. Pour ce faire, choisissez Outils | Références et puis faire défiler les références disponibles pour rechercher l’option Microsoft VBScript Regular Expressions 5.5. Assurez-vous que la case à cocher à gauche de la référence est cochée, puis cliquez sur OK.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (13707) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.