Ruby sta cercando di trovare un modo semplice per determinare il numero di atomi nelle formule molecolari di alcune strutture chimiche. Ad esempio, una cella potrebbe contenere una formula come C12H10N6F2. In questo caso il numero di atomi è 12 + 10 + 6 + 2 = 30. Ruby ha circa 300 di queste formule da fare e si chiedeva se esiste una formula Excel che può essere utilizzata per farlo.

Primo, la cattiva notizia: non esiste un modo semplice per farlo.

Là; con quello fuori mano, possiamo iniziare a cercare soluzioni. L’esempio di formula chimica fornita da Ruby può portare alcuni a pensare che il conteggio degli atomi sia un semplice processo di sostituzione dei caratteri alfabetici con qualcos’altro in modo che possano essere valutati solo i caratteri numerici. Ad esempio, ecco la formula chimica di esempio di Ruby:

C12H10N6F2

Se sostituisci i caratteri alfabetici con i segni più, ottieni questo:

+12+10+6+2

Sembra una formula semplice ora, giusto? Questo è ingannevole, perché mentre funzionerà in questo caso, potrebbe non funzionare affatto per le altre formule chimiche di Ruby. Considera la seguente formula chimica che molte persone conosceranno:

H2O

Fare la stessa sostituzione rende questo:

+2

Il problema è che c’è un conteggio implicito di 1 ogni volta che c’è un singolo elemento, ad esempio l’elemento ossigeno. Quindi, H2O è in realtà di 3 atomi.

Quindi ora possiamo trovare un modo per spiegare semplicemente l’1 implicito, giusto? Sicuro; questo può essere fatto. Può essere fatto più facilmente e in modo pulito con una macro, come la seguente funzione definita dall’utente:

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

Per utilizzare questa funzione nel tuo foglio di lavoro, devi semplicemente fare riferimento alla formula chimica:

=CountAtoms(A1)

Se la formula chimica si trova nella cella A1, questa funzione restituisce il conteggio desiderato. Funzionerà anche con formule come le seguenti:

NaCl SbF6

Si noti che questi si basano su nomi di elementi a due caratteri, di cui ce ne sono molti. Richiede, tuttavia, che il secondo carattere di un nome di elemento a due caratteri non sia maiuscolo.

Quindi, questo approccio funzionerà con tutte le formule chimiche? Non proprio; funziona solo con quelli semplici che abbiamo trattato finora. Vedi, le formule chimiche possono diventare piuttosto complesse. Considera il seguente esempio:

2H2O

Quando un numero iniziale appare così, la formula deve essere moltiplicata per quel valore. Quindi, invece dei normali 3 atomi in H2O, questa formula avrebbe 6 atomi.

La situazione peggiora. Considera le seguenti formule chimiche valide:

Ca3(PO4)2 Al2(SO4)3(H2O)18

Notare le parentesi seguite da un numero. In questa nomenclatura, il valore immediatamente successivo alla parentesi chiusa indica quante delle molecole tra parentesi si trovano nella molecola più grande. Quindi, nel secondo esempio ci sono 3 molecole di SO4 e 18 molecole di H2O nella molecola complessiva. Questo ovviamente influenza il numero di atomi nell’intera formula. Per aumentare la complessità, le parentesi possono anche essere annidate:

CH3(C3H4(NH2)2)18CH3

Divertente, eh?

Questo può ancora essere risolto con una macro più complessa. Invece di reinventare la ruota qui, però, se stai lavorando con formule chimiche complesse come queste, potresti prendere in considerazione l’utilizzo delle macro fornite in questo sito:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=670

Notare che le macro non sono implementate come funzioni definite dall’utente. Per utilizzarli è sufficiente selezionare le celle con le formule, eseguire la macro, quindi le macro modificano le informazioni nelle colonne a destra delle formule chimiche selezionate. Le istruzioni complete sono incluse con il codice nel sito Web sopra.

Dovrai anche assicurarti di abilitare, in Visual Basic Editor, le espressioni regolari. Puoi farlo scegliendo Strumenti | Riferimenti e quindi scorrere i riferimenti disponibili per individuare l’opzione Microsoft VBScript Regular Expressions 5.5. Assicurati che la casella di controllo a sinistra del riferimento sia selezionata, quindi fai clic su OK.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13707) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.