Ruby đang cố gắng tìm ra một cách dễ dàng để xác định số nguyên tử trong công thức phân tử của một số cấu trúc hóa học. Ví dụ, một ô có thể chứa công thức như C12H10N6F2. Trong trường hợp này số nguyên tử là 12 + 10 + 6 + 2 = 30. Ruby có khoảng 300 công thức trong số này để thực hiện và đang tự hỏi liệu có công thức Excel nào có thể được sử dụng để làm điều này không.

Đầu tiên, tin xấu: Không có cách nào dễ dàng để làm điều này.

Ở đó; với điều đó, chúng ta có thể bắt đầu tìm kiếm các giải pháp. Công thức hóa học ví dụ do Ruby cung cấp có thể khiến một số người nghĩ rằng đếm nguyên tử là một quá trình đơn giản để thay thế các ký tự chữ cái bằng một thứ khác để chỉ các ký tự số có thể được đánh giá. Ví dụ, đây là công thức hóa học ví dụ của Ruby:

C12H10N6F2

Nếu bạn thay thế các ký tự chữ cái bằng các dấu cộng, bạn nhận được điều này:

+12+10+6+2

Có vẻ như một công thức đơn giản bây giờ, phải không? Điều này là lừa dối, bởi vì mặc dù nó sẽ hoạt động trong trường hợp này, nhưng nó có thể không hoạt động với các công thức hóa học khác của Ruby. Hãy xem xét công thức hóa học sau đây mà nhiều người sẽ quen thuộc:

H2O

Thực hiện thay thế tương tự cho thấy điều này:

+2

Vấn đề là, có một số đếm ngụ ý là 1 bất cứ khi nào có một nguyên tố – ví dụ: nguyên tố oxy. Như vậy, H20 thực chất là 3 nguyên tử.

Vì vậy, bây giờ chúng ta có thể nghĩ ra một cách đơn giản để tính toán hàm ý 1, phải không? Chắc chắn rồi; điều này có thể thực hiện được. Nó có thể được thực hiện dễ dàng và rõ ràng nhất với macro, chẳng hạn như hàm do người dùng định nghĩa sau:

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

Để sử dụng hàm này trong trang tính của bạn, bạn chỉ cần tham khảo công thức hóa học:

=CountAtoms(A1)

Nếu công thức hóa học nằm trong ô A1, hàm này trả về số lượng bạn muốn. Nó thậm chí sẽ hoạt động với các công thức như sau:

NaCl SbF6

Lưu ý rằng những tên này dựa trên tên phần tử có hai ký tự, trong đó có rất nhiều. Tuy nhiên, nó yêu cầu không được viết hoa ký tự thứ hai của tên phần tử gồm hai ký tự.

Vì vậy, cách tiếp cận này sẽ hoạt động với tất cả các công thức hóa học? Không hẳn vậy; nó chỉ hoạt động với những cái đơn giản mà chúng tôi đã đề cập cho đến nay. Bạn thấy đấy, các công thức hóa học có thể khá phức tạp. Hãy xem xét ví dụ sau:

2H2O

Khi một số ban đầu xuất hiện như thế này, thì công thức sẽ được nhân với giá trị đó. Do đó, thay vì 3 nguyên tử bình thường trong H2O, công thức này sẽ có 6 nguyên tử.

Nó trở nên tồi tệ hơn. Hãy xem xét các công thức hóa học hợp lệ sau:

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

Lưu ý các dấu ngoặc đơn theo sau là một số. Trong danh pháp này, giá trị ngay sau dấu ngoặc đơn cho biết có bao nhiêu phân tử trong dấu ngoặc đơn là phân tử lớn hơn. Như vậy, trong ví dụ thứ hai có 3 phân tử SO4 và 18 phân tử H2O trong tổng thể phân tử. Điều này rõ ràng ảnh hưởng đến số lượng nguyên tử trong toàn bộ công thức. Để ghép phức tạp, các dấu ngoặc đơn thậm chí có thể được lồng vào nhau:

CH3(C3H4(NH2)2)18CH3

Vui nhỉ?

Điều này vẫn có thể được giải quyết bằng một macro phức tạp hơn. Tuy nhiên, thay vì phát minh lại bánh xe ở đây, nếu bạn đang làm việc với các công thức hóa học phức tạp như thế này, bạn có thể muốn xem xét sử dụng các macro được cung cấp tại trang web này:

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

Lưu ý rằng các macro không được triển khai dưới dạng các hàm do người dùng xác định. Để sử dụng chúng, bạn chỉ cần chọn các ô có công thức, chạy macro, sau đó macro sửa đổi thông tin trong các cột bên phải của các công thức hóa học đã chọn. Hướng dẫn đầy đủ được bao gồm với mã tại trang web trên.

Bạn cũng sẽ cần đảm bảo rằng bạn bật biểu thức chính quy trong Visual Basic Editor. Bạn thực hiện việc này bằng cách chọn Tools | Tham chiếu và sau đó cuộn qua các tham chiếu có sẵn để tìm tùy chọn Microsoft VBScript Regular Expressions 5.5. Đảm bảo hộp kiểm bên trái của tham chiếu được chọn, sau đó bấm OK.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (13707) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.