Подсчет атомов в химической формуле (Microsoft Excel)
Руби пытается найти простой способ определить количество атомов в молекулярных формулах некоторых химических структур. Например, ячейка может содержать такую формулу, как C12H10N6F2. В данном случае количество атомов составляет 12 + 10 + 6 + 2 = 30. Ruby нужно выполнить около 300 таких формул, и ему было интересно, есть ли формула Excel, которая может быть использована для этого.
Во-первых, плохие новости: нет простого способа сделать это.
Там; разобравшись с этим, мы можем начать искать решения. Пример химической формулы, представленный Ruby, может заставить некоторых думать, что подсчет атомов — это простой процесс замены буквенных символов чем-то другим, чтобы можно было вычислить только числовые символы. В качестве примера приведем пример химической формулы Руби:
C12H10N6F2
Если вы замените буквенные символы знаками плюс, вы получите следующее:
+12+10+6+2
Теперь это похоже на простую формулу, верно? Это обман, потому что, хотя в данном случае он будет работать, он может вообще не работать для других химических формул Ruby. Рассмотрим следующую химическую формулу, с которой будут знакомы многие люди:
H2O
Выполнение такой же замены дает следующее:
+2
Проблема в том, что подразумевается 1 всякий раз, когда есть единственный элемент, например кислородный элемент. Таким образом, H2O фактически состоит из 3 атомов.
Итак, теперь мы можем придумать способ просто учесть подразумеваемую 1, верно? Конечно; это можно сделать. Проще всего это сделать с помощью макроса, например следующей пользовательской функции:
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
Чтобы использовать эту функцию в своем рабочем листе, вы должны просто сослаться на химическую формулу:
=CountAtoms(A1)
Если химическая формула находится в ячейке A1, эта функция возвращает желаемое количество. Он будет работать даже с такими формулами, как:
NaCl SbF6
Обратите внимание, что они основаны на двухсимвольных именах элементов, которых много. Однако это требует, чтобы второй символ двухсимвольного имени элемента не был написан с заглавной буквы.
Итак, будет ли этот подход работать со всеми химическими формулами? На самом деле, нет; он работает только с теми простыми, которые мы рассмотрели до сих пор. Видите ли, химические формулы могут быть довольно сложными. Рассмотрим следующий пример:
2H2O
Когда начальное число выглядит таким образом, формулу нужно умножить на это значение. Таким образом, вместо обычных 3 атомов в H2O, эта формула будет иметь 6 атомов.
Становится хуже. Рассмотрим следующие действительные химические формулы:
Ca3(PO4)2 Al2(SO4)3(H2O)18
Обратите внимание на скобки, за которыми следует число. В этой номенклатуре значение, следующее за закрывающей круглой скобкой, указывает, сколько молекул в скобках находится в большей молекуле. Таким образом, во втором примере в общей молекуле 3 молекулы SO4 и 18 молекул H2O. Очевидно, это влияет на количество атомов во всей формуле. Чтобы усложнить сложность, можно даже вложить круглые скобки:
CH3(C3H4(NH2)2)18CH3
Весело, да?
Эту проблему все еще можно решить с помощью более сложного макроса. Однако вместо того, чтобы изобретать велосипед здесь, если вы работаете со сложными химическими формулами, такими как эти, вы можете рассмотреть возможность использования макросов, представленных на этом сайте:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=670
Обратите внимание, что макросы не реализованы как пользовательские функции. Чтобы использовать их, вы просто выбираете ячейки с формулами, запускаете макрос, а затем макросы изменяют информацию в столбцах справа от выбранных химических формул. Полные инструкции включены в код на указанном выше веб-сайте.
Вам также необходимо убедиться, что вы включили в редакторе Visual Basic регулярные выражения. Вы делаете это, выбирая Инструменты | Ссылки, а затем прокрутите доступные ссылки, чтобы найти параметр Microsoft VBScript Regular Expressions 5.5. Убедитесь, что установлен флажок слева от ссылки, затем нажмите OK.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13707) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.