Contar átomos en una fórmula química (Microsoft Excel)
Ruby está tratando de encontrar una manera fácil de determinar el número de átomos en fórmulas moleculares de algunas estructuras químicas. Por ejemplo, una celda puede contener una fórmula como C12H10N6F2. En este caso, la cantidad de átomos es 12 + 10 + 6 + 2 = 30. Ruby tiene alrededor de 300 de estas fórmulas para hacer y se preguntaba si hay una fórmula de Excel que pueda usarse para hacer esto.
Primero, las malas noticias: no hay una manera fácil de hacer esto.
Ahí; con eso fuera del camino, podemos empezar a buscar soluciones. La fórmula química de ejemplo proporcionada por Ruby puede llevar a algunos a pensar que contar átomos es un proceso simple de sustituir los caracteres alfabéticos con otra cosa para que solo se puedan evaluar los caracteres numéricos. Como ejemplo, aquí está la fórmula química de ejemplo de Ruby:
C12H10N6F2
Si reemplaza los caracteres alfabéticos con signos más, obtiene esto:
+12+10+6+2
Parece una fórmula simple ahora, ¿verdad? Esto es engañoso, porque si bien funcionará en este caso, es posible que no funcione en absoluto para otras fórmulas químicas de Ruby. Considere la siguiente fórmula química con la que muchas personas estarán familiarizadas:
H2O
Hacer la misma sustitución da como resultado:
+2
El problema es que hay un recuento implícito de 1 siempre que hay un solo elemento, por ejemplo, el elemento oxígeno. Por lo tanto, el H20 es en realidad 3 átomos.
Entonces, ahora podemos encontrar una forma de simplemente dar cuenta del 1 implícito, ¿verdad? Por supuesto; esto puede hacerse. Se puede hacer de la manera más fácil y limpia con una macro, como la siguiente función definida por el usuario:
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
Para usar esta función en su hoja de trabajo, simplemente debe hacer referencia a la fórmula química:
=CountAtoms(A1)
Si la fórmula química está en la celda A1, esta función devuelve el recuento que desea. Incluso funcionará con fórmulas como las siguientes:
NaCl SbF6
Tenga en cuenta que se basan en nombres de elementos de dos caracteres, de los cuales hay muchos. Sin embargo, requiere que el segundo carácter de un nombre de elemento de dos caracteres no esté en mayúscula.
Entonces, ¿este enfoque funcionará con todas las fórmulas químicas? Realmente no; solo funciona con los simples que hemos cubierto hasta ahora. Verá, las fórmulas químicas pueden volverse bastante complejas. Considere el siguiente ejemplo:
2H2O
Cuando un número inicial aparece como este, entonces la fórmula debe multiplicarse por ese valor. Por lo tanto, en lugar de los 3 átomos normales en H2O, esta fórmula tendría 6 átomos.
Se pone peor. Considere las siguientes fórmulas químicas válidas:
Ca3(PO4)2 Al2(SO4)3(H2O)18
Tenga en cuenta los paréntesis seguidos de un número. En esta nomenclatura, el valor que sigue inmediatamente al paréntesis de cierre indica cuántas de las moléculas dentro del paréntesis están en la molécula más grande. Por tanto, en el segundo ejemplo, hay 3 moléculas de SO4 y 18 moléculas de H2O en la molécula total. Obviamente, esto afecta el número de átomos en toda la fórmula. Para aumentar la complejidad, los paréntesis incluso se pueden anidar:
CH3(C3H4(NH2)2)18CH3
Divertido, ¿eh?
Esto todavía se puede abordar con una macro más compleja. Sin embargo, en lugar de reinventar la rueda aquí, si está trabajando con fórmulas químicas complejas como estas, es posible que desee considerar el uso de las macros proporcionadas en este sitio:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=670
Tenga en cuenta que las macros no se implementan como funciones definidas por el usuario. Para usarlos, simplemente seleccione las celdas con las fórmulas, ejecute la macro y luego las macros modifican la información en las columnas a la derecha de las fórmulas químicas seleccionadas. Las instrucciones completas se incluyen con el código en el sitio web anterior.
También deberá asegurarse de habilitar, en el Editor de Visual Basic, las expresiones regulares. Para ello, seleccione Herramientas | Referencias y luego desplazarse por las referencias disponibles para localizar la opción Expresiones regulares de Microsoft VBScript 5.5. Asegúrese de que la casilla de verificación a la izquierda de la referencia esté seleccionada, luego haga clic en Aceptar.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (13707) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.